2

論理的な助けが欲しいのです。私はデータベースに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;
}

皆さんありがとう

4

2 に答える 2

3

データベースに、レコードを乱数で並べ替えるように指示できます。

cursor = db.query(DB_TABLE, null, null, null, null, null, "random()");
于 2012-10-19T12:27:12.213 に答える
1

コレクションのシャッフルはどうですか? http://developer.android.com/reference/java/util/Collections.html#shuffle(java.util.List)

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) {
        // get all the rows
        rawCursor.moveToFirst();
        do {
            Rows raw = new Raws(rawCursor.getInt(rawCursor.getColumnIndex("_id")), rawCursor.getString(rawCursor.getColumnIndex("raw")), rawCursor.getInt(rawCursor.getColumnIndex("fav")));
            myRaw.add(raw);
        } while (rawCursor.moveToNext());
        rawCursor.close();
    }
    // shuffle the rows in some kind of random order
    Collections.shuffle(myRaw);
    return myRaw;
}

@CLによって提供された答え。より良いオプションかもしれませんが、主な違いは、メソッドに独自のオブジェクトshuffleを提供するオプションがあることです。これは、ランダムにシードできることを意味します。Random

//Random with seed;
Random r = new Random(68498493);
Collections.shuffle(myRaw, r);
于 2012-10-19T12:27:57.437 に答える