TにCoverImageプロパティがあるリストがあります。リスト内のすべてのアイテムにランダムな順序でアクセスし、サーバーから適切な画像をロードしたいと思います。サーバーからデータをロードすることに興味はありません。知りたいのは、そのリスト内のすべての要素にランダムに1回だけアクセスする方法だけです。
質問する
177 次
4 に答える
4
Random rnd = new Random();
foreach(var elem in list.OrderBy(x => rnd.Next()))
{
}
于 2013-01-10T22:31:38.217 に答える
2
これに適切な用語はシャッフルです。シャッフルは、コレクション/シーケンスをランダムな順序に並べ替えるという概念です。
そうするための多くの手段があり、パフォーマンスへの影響はさまざまです。フィッシャー-イェーツシャッフルが最適です
擬似コード:
To shuffle an array a of n elements (indices 0..n-1):
for i from n − 1 downto 1 do
j ← random integer with 0 ≤ j ≤ i
exchange a[j] and a[i]
于 2013-01-10T22:32:36.847 に答える
0
Random r = new Random();
List<T> myListRnd = new List<T>();
int p = 0;
while (myList.Count > 0)
{
p = r.Next(myList.Count + 1)
myListRnd.Add(myList[p]);
myList.RemoveAt[p];
}
于 2013-01-10T22:41:55.533 に答える
0
独自の拡張メソッドを作成することに興味がある場合は、次のようになります。
public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> enumerable, Random random)
{
List<T> itemList = new List<T>(enumerable);
for (int i = 0; i < itemList.Count; ++i)
{
int randomIndex = random.Next(itemList.Count);
if (randomIndex != i)
{
T temp = itemList[i];
itemList[i] = itemList[randomIndex];
itemList[randomIndex] = temp;
}
}
return itemList;
}
于 2013-01-10T23:02:11.830 に答える