2011-01-26 11 views
6

いくつかのメソッドA()、B()およびC()をランダムな順序で実行するC#プログラムを記述したいと思います。どうやってやるの?乱数ジェネレータを仮定しメソッドはランダムな順序で呼び出す(C#)

+2

Gjorgji、GUIDのアイデアがひどいです。最低でもランダムで注文してください - またはより良い方法では、最も投票されたアルゴリズムを使用してください。それらの投票からヒントを取ってください - コミュニティはあなたにどれが良いかを教えています。 –

+0

非常に恐ろしいアイデアなので、Googleで見つからないのはなぜですか?http://www.google.com/search?q=orderby+%22Guid.NewGuid%22 –

+3

@Pauli、あなたの信念はGoogleで見つけたものは自動的に良いアイデアですか? –

答えて

14

は次のように宣言:

public static Random Rnd = new Random(); 

はのは、ランダムな順序にリストを持ってShuffle関数を定義してみましょう:

/// <summary> 
/// Brings the elements of the given list into a random order 
/// </summary> 
/// <typeparam name="T">Type of elements in the list.</typeparam> 
/// <param name="list">List to shuffle.</param> 
/// <returns>The list operated on.</returns> 
public static IList<T> Shuffle<T>(this IList<T> list) 
{ 
    if (list == null) 
     throw new ArgumentNullException("list"); 
    for (int j = list.Count; j >= 1; j--) 
    { 
     int item = Rnd.Next(0, j); 
     if (item < j - 1) 
     { 
      var t = list[item]; 
      list[item] = list[j - 1]; 
      list[j - 1] = t; 
     } 
    } 
    return list; 
} 

romkynsのこのシャッフル実装の礼儀!

今すぐ簡単にリストのメソッドを入れて、シャッフルは、それらを実行します。

var list = new List<Action> { A, B, C }; 
list.Shuffle(); 
list.ForEach(method => method()); 
+0

Linqでシャッフルする最も簡単な方法は、* OrderBy(m => Guid.NewGuid())* –

+4

+1を実際のシャッフルに使用することです。 – SLaks

+3

@Pauli:確実に動作するプログラムよりもゴミを出力するプログラムを作成するほうが簡単です。 – Timwi

関連する問題