【发布时间】:2012-10-10 01:33:58
【问题描述】:
全部 我需要逻辑帮助。我在数据库中有 100 行,并随机获取所有行,没有重复我在下面的代码中使用过。
public ArrayList<Rows> getRows(){
ArrayList<Rows> myRaw=new ArrayList<Rows>();
Cursor rawCursor=this.db.query(DB_TABLE, null, null, null, null, null, null);
if(rawCursor.getCount()>0){
Random rng = new Random();
rawCursor.moveToFirst();
do {
// Ideally just create one instance globally
ArrayList<Rows> generated = new ArrayList<Raws>();
for (int i = 0; i < 371; i++)
{
while(true)
{
Integer next = rng.nextInt(371) + 1;
rawCursor.moveToPosition(next);
Rows raw=new Raws(rawCursor.getInt(rawCursor.getColumnIndex("_id")),rawCursor.getString(rawCursor.getColumnIndex("raw")),rawCursor.getInt(rawCursor.getColumnIndex("fav")));
if (!generated.contains(raw))
{
// Done for this iteration
generated.add(raw);
break;
}
}
}
myRaw=generated;
} while (rawCursor.moveToNext());
rawCursor.close();
}
return myRaw;
}
谢谢大家
【问题讨论】:
-
您的问题是什么?即你写的代码有什么问题?
-
有什么理由不使用
ORDER BY RANDOM()? -
@RenatoLochetti :好的,但当我提出问题并且我没有得到正确的答案时,我怎么能接受它,因为其他开发人员可能会关注它。
-
@MattWhipple 你能解释更多关于随机订单的信息吗?
-
如果您在原始查询中添加
ORDER BY RANDOM()子句,则结果集将是随机的,您可以对其进行迭代。您将把责任转移到 SQLite 上,它的内部优化超出了您的能力范围。接受的答案会解决这个问题。