2012-08-29 9 views
6

Duplicar posible:
Randomize a List<T> in C#
shuffle (rearrange randomly) a List<string>
Random plot algorithmazar shuffle una lista

Hola tengo la siguiente lista y quiero dar salida a la model en una lista, pero lo hacen al azar. He visto algunos ejemplos, pero parecen estar realmente convulsionados. Solo quiero una manera simple de hacer esto?

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

posible duplicado de [Selección aleatoria de una lista en C#] (http://stackoverflow.com/questions/273313/randomize-a-listt-in-c-sharp) o [Aleatorio Lista ] (http://stackoverflow.com/questions/2301015/shuffle-listt) o ... –

Respuesta

10

Creo que todo lo que quieres es esto, es una forma sencilla de hacerlo;

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

// Modelo es suponiendo que es el nombre de su propiedad

Nota: Aleatorio(), irónicamente, no es en realidad muy aleatorio pero está bien para una solución sencilla rápida. Hay mejores algoritmos para hacer esto, aquí hay uno para mirar;

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

+2

[¿Por qué el uso de Aleatorio en Ordenar provoca [No se ha podido ordenar el error IComparer.Compare] (http://stackoverflow.com/questions/4129995/why-does-using-random-in-sort-causing-unable-to-sort-icomparer-compare-error) –

+0

@LP El OP pidió una solución simple, y este es uno, el enlace que usted ha proporcionado bastante estados lo que he declarado en mi respuesta también. – saj

+2

También su complejidad es 'N * LogN' mientras que se puede hacer en' N' –

-1

he visto algo de código desordenado de este pre-LINQ, pero la forma en LINQ parece bastante limpio.

Tal vez dar una oportunidad?

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

[¿Por qué usar Random in Sort provocando [No se ha podido ordenar el error IComparer.Compare] (http://stackoverflow.com/questions/4129995/why-does-using-random-in-sort-causing-unable-to-sort-icomparer-compare-error) –

+0

Malo idea, vea los comentarios [aquí] (http://stackoverflow.com/a/3456788/207655). –

Cuestiones relacionadas