2012-08-29 1 views
6

可能な重複シャッフル:
Randomize a List<T> in C#
shuffle (rearrange randomly) a List<string>
Random plot algorithmランダムリストに

こんにちは、私は次のリストを持っていると私は、出力リストにmodelにしたいのが、そう無作為に。私はいくつかの例を見てきましたが、実際にはうまく混じっているようです。私はこれを行う簡単な方法がほしいですか?

List<Car> garage ----randomise------> List<string> models 


List<Car> garage = new List<Car>(); 

garage.Add(new Car("Citroen", "AX")); 
garage.Add(new Car("Peugeot", "205")); 
garage.Add(new Car("Volkswagen", "Golf")); 
garage.Add(new Car("BMW", "320")); 
garage.Add(new Car("Mercedes", "CLK")); 
garage.Add(new Car("Audi", "A4")); 
garage.Add(new Car("Ford", "Fiesta")); 
garage.Add(new Car("Mini", "Cooper")); 
+0

(http://stackoverflow.com/questions/273313/randomize-a-listt-in-c-sharp)または[シャッフル[C#でリストをランダム]の可能な重複リスト](または、http://stackoverflow.com/questions/2301015/shuffle-listt)または –

答えて

10

これは簡単な方法です。

Random rand = new Random(); 
var models = garage.OrderBy(c => rand.Next()).Select(c => c.Model).ToList(); 

//モデルは、それはあなたの財産

ノートの名前だと仮定されます。)ランダム(、皮肉にも、実際には非常にランダムなく、素早く簡単な解決策のための罰金ではありません。これを行うには、より良いアルゴリズムがあります。見てみましょう。

http://en.wikipedia.org/wiki/Fisher-Yates_shuffle

+2

[ソートでランダムを使用すると[IComparer.Compareエラーをソートできません](http://stackoverflow.com) /質問/ 4129995 /なぜソートを使用してソートを引き起こすことができない - ソート - icomparer - 比較エラー) –

+0

@LP OPは簡単な解決策を求め、これは、あなたは私の答えに述べたものをかなりの州にも供給しました。 – saj

+2

また、その複雑さは 'N * LogN'であり、' N 'で行うことができます。 –

-1

私はこの前LINQのためのいくつかの厄介なコードを見てきましたが、LINQの道はかなりきれいなようです。

多分、これを撃つでしょうか?

http://www.ookii.org/post/randomizing_a_list_with_linq.aspx

Random rnd = new Random(); 
var randomizedList = from item in list 
        orderby rnd.Next() 
        select item; 
+1

[ソートでランダムを使用しているのはなぜですか[IComparer.Compareエラーを並べ替えることができません](http://stackoverflow.com/questions/4129995/why-does-using-random-in-sort-causing-unable-to-sort-icomparer-compare-error) –

+0

アイデアは、コメント[ここ](http://stackoverflow.com/a/3456788/207655)を参照してください。 –

関連する問題