1

一連のアイテムをデータ構造に追加し、後でその中のすべてのアイテムにランダムな順序でアクセスする必要があります。これどうやってするの?

具体的には、現在、List<string>オブジェクトに URL を追加しています。これらは、隣接する URL が同じサーバー上にある可能性が高い方法で追加されます。Parallel.ForEach ステートメントを使用して List にアクセスすると、追加した順序で項目が返されます。通常はこれで問題ありませんが、Web リクエストを並行して行うと、一部のサーバーが過負荷になり、タイムアウトが発生する傾向があります。オブジェクトに対して Parallel.ForEach ステートメントを実行したときに、よりランダムな方法で (つまり、追加した順序ではなく) アイテムを返すには、どのデータ構造を使用できますか?

4

2 に答える 2

1

オリジナルソリューション

フィッシャー・イェーツ・シャッフル

public static void Shuffle<T>(this IList<T> list)  
{  
    Random rng = new Random();  
    int n = list.Count;  
    while (n > 1) {  
        n--;  
        int k = rng.Next(n + 1);  
        T value = list[k];  
        list[k] = list[n];  
        list[n] = value;  
    }  
}

List<Product> products = GetProducts();
products.Shuffle();
于 2013-05-13T23:38:28.890 に答える