【发布时间】:2015-06-02 10:46:11
【问题描述】:
我有一个Cursor 查询数据库。我有兴趣从列中获取所有数字,并对它们进行一些简单的统计(例如,平均值、标准差等等),这些统计将显示给用户。
我想念这里的整个模式。我是否应该将所有值存储在 int[] 数组中,然后进行操作?我想到的唯一方法是:
int entries = cursor.getCount();
int[] array = new int[entries];
for (int i = 0; i < entries; i++) {
cursor.moveToPosition(i);
array[i] = cursor.getInt(...);
}
此时我被卡住了,因为我不知道如何在int[] 上执行一些操作(甚至是简单的意思),可能没有第二个for。
作为第二次机会,我可以这样做:
int entries = cursor.getCount();
float mean = 0;
for (int i = 0; i < entries; i++) {
cursor.moveToPosition(i);
int newValue = cursor.getInt(...);
mean = mean + newValue/entries;
}
return mean;
但它对我来说一直看起来很糟糕。 此外,如果我需要计算更复杂的统计数据,情况可能会变得更糟。可以以某种方式避免这种 for 循环吗?还有更正确的方法吗?
【问题讨论】:
-
您可能会在查询时获得值。 Sqlite 具有
AVG函数。您应该检查它是否在 android 中也可用(应该)。 -
@Blackbelt 谢谢,很高兴知道。但是,我肯定需要计算的不仅仅是平均值,如果 these 都是可用的函数,我还没有真正完成。我只是想知道
for+moveToPosition()是否是标准方式。 -
你列出了两个:平均值和标准差。意思很简单,你已经有了这个功能。要计算标准偏差,可以使用 sum、avg 和 count,来计算平方根的自变量,
-
@Blackbelt 可能是我对 SQLite 一无所知,但是如果我需要 (value[i]-average)^2 的总和,我怎么能在列值上使用
SUM( columnName )?像SUM((columnName - AVG(columnName))^2)这样的东西有用吗?谢谢。 -
它稍微复杂一点,但你在正确的轨道上
标签: java android statistics android-cursor