2017-09-28 23 views
1

C#ではオブジェクトのリストがあります。例えば、属性 "color"を持つ "cars"のリスト。今私は属性 "緑"を持つすべての車をランダムに発注したいと思う。オブジェクトのリスト内の特定の要素の無作為な順序c#

Car c01 = new Car("green","HONDA"); 
Car c02 = new Car("blue","BMW"); 
Car c03 = new Car("green","NISSAN"); 
Car c04 = new Car("blue","VW"); 
Car c05 = new Car("red","MERCEDES"); 
Car c06 = new Car("green","BMW"); 

List<CarAcceleration> Cars = new List<CarAcceleration>(); 
Cars.Add (c01); 
Cars.Add (c02); 
Cars.Add (c03); 
Cars.Add (c04); 
Cars.Add (c05); 
Cars.Add (c06); 

私の考えは、第1、第2のリストにすべての緑の車を書き、それを並べ替えた後、何とか最初の大きなリストの要素を上書きすることです。多分もっと良い解決策はありますか?ありがとう


残念ながら、私はまだ正しい順序でリストの残りの部分を保持したい。例えば、この配置は、解決策のようになります。

Car c06 = new Car("green","BMW"); 
Car c02 = new Car("blue","BMW"); 
Car c01 = new Car("green","HONDA"); 
Car c04 = new Car("blue","VW"); 
Car c05 = new Car("red","MERCEDES"); 
Car c03 = new Car("green","NISSAN"); 
+0

はあなたがランダムにだけグリーン車のインデックスを並べ替えているか、他の車の色は元のリストで重複を作るグリーン車で上書きされます?? – BrokenRobot

+0

これをチェックしましたか? https://stackoverflow.com/questions/273313/randomize-a-listt –

答えて

1

これは動作します:

var rnd = new Random(); 
var shuffledGreen = 
    Cars 
     .Where(c => c.Color == "green") 
     .OrderBy(c => rnd.Next()) 
     .ToArray(); 

for (int i = 0, j = 0; i <= Cars.Count() - 1; i++) 
{ 
    if (Cars[i].Color == "green") 
    { 
     Cars[i] = shuffledGreen[j++]; 
    } 
} 
関連する問題