2012-08-29 13 views
6

Powiel możliwe:
Randomize a List<T> in C#
shuffle (rearrange randomly) a List<string>
Random plot algorithmLosowo przetasować listę

Witam mam następujące listy i chcę wysyłać model na liście, ale zrobić losowo. Widziałem kilka przykładów, ale wydaje się, że są naprawdę konwulsyjne. Chcę tylko prosty sposób to zrobić?

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

możliwe duplikat [Randomize listy C#] (http://stackoverflow.com/questions/273313/randomize-a-listt-in-c-sharp) lub [losowe List ] (http://stackoverflow.com/questions/2301015/shuffle-listt) lub ... –

Odpowiedz

10

Myślę, że wszystko, co chcesz to, to prosty sposób na zrobienie tego;

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

// model jest przy założeniu, że jest to nazwa własności

Uwaga: random(), jak na ironię, w rzeczywistości nie jest przypadkowy, ale bardzo dobrze do szybkiego prostego rozwiązania. Istnieją lepsze algorytmy, aby to zrobić, oto jeden do obejrzenia;

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

+2

[Dlaczego używasz losowego sortowania powodującego [Nie można sortować błędu IComparer.Compare] (http://stackoverflow.com/questions/4129995/why-does-using-random-in-sort-causes-able-to-sort-icomparer-compare-error) –

+0

@LP OP poprosił o proste rozwiązanie, i to jest jedno, link, który dostarczyłeś dość dużo stanów, o których również powiedziałem w mojej odpowiedzi. – saj

+2

Również jego złożoność to 'N * LogN', podczas gdy można to zrobić w' N' –

-1

Widziałem jakiś kod bałagan na tej wstępnej LINQ, ale sposób LINQ wydaje się dość czyste.

Może dać temu szansę?

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

[Dlaczego używasz losowego sortowania [Nie można posortować błędu IComparer.Compare] (http://stackoverflow.com/questions/4129995/why-does-using-random-in-sort-causing-unable-to-sort-icomparer-compare-error) –

+0

Zły pomysł, zobacz komentarze [tutaj] (http://stackoverflow.com/a/3456788/207655). –