2012-08-29 16 views
6

Eventuali duplicati:
Randomize a List<T> in C#
shuffle (rearrange randomly) a List<string>
Random plot algorithmCasualmente mescolare un elenco

Ciao ho la seguente lista e voglio uscita model in una lista, ma fare così a caso. Ho visto alcuni esempi, ma sembrano davvero contorti. Voglio solo un modo semplice per farlo?

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

possibile duplicato di [Randomizza un elenco in C#] (http://stackoverflow.com/questions/273313/randomize-a-listt-in-c-sharp) o [Shuffle Elenco ] (http://stackoverflow.com/questions/2301015/shuffle-listt) o ... –

risposta

10

Penso che tutto ciò che si desidera è questo, è un modo semplice per farlo;

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

// modello parte dal presupposto che è il nome della vostra proprietà

Nota: Random(), per ironia della sorte, non è in realtà molto casuale ma va bene per una soluzione rapida semplice. Ci sono migliori algoritmi là fuori per fare questo, eccone uno da guardare;

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

+2

[Perché si utilizza Random in Sort che causa [Impossibile correggere l'errore IComparer.Compare] (http://stackoverflow.com/questions/4129995/why-does-using-random-in-sort-causando-failure-to-sort-icomparer-compare-error) –

+0

@LP L'OP ha chiesto una soluzione semplice, e questo è uno, il collegamento che hai fornito praticamente degli stati che ho affermato anche nella mia risposta. – saj

+2

Anche la sua complessità è 'N * LogN' mentre può essere eseguita in' N' –

-1

Ho visto alcuni codice disordinato per questa pre-LINQ, ma il modo in LINQ sembra abbastanza pulito.

Forse dare uno scatto?

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

[Perché si usa Random in Sort causando [Impossibile correggere l'errore IComparer.Compare] (http://stackoverflow.com/questions/4129995/why-does-using-random-in-sort-causing-unable-to-sort-icomparer-compare-error) –

+0

Bad idea, vedi commenti [qui] (http://stackoverflow.com/a/3456788/207655). –

Problemi correlati