2011-03-14 14 views
14

¿Por qué el siguiente código no ordena mi lista?Ordenando una lista con pedidoBy

List<string> lst = new List<string>() { "bac", "abc", "cab" }; 
lst.OrderBy(p => p.Substring(0)); 

Respuesta

24

desde OrdenarPor vuelve IOrderedEnumerable que debe hacer:

lst = lst.OrderBy(p => p.Substring(0)).ToList(); 

también se puede hacer lo siguiente:

lst.Sort(); 
+0

..simple Kool n perfecta –

+0

Tenga en cuenta que 'Lista .Sort' es un tipo inestable, mientras que OrdenarPor es estable. Y, por supuesto, en este caso, el orden es * solo * por la primera letra, mientras que el uso de 'list.Sort' sin ningún parámetro ordenará por toda la cadena. –

+0

Jon, '.Substring (0)' devuelve toda la cadena, creo ... Para el primer personaje, necesita '.Substring (0,1)' o '[0]' ... –

13

Usted está confundiendo las operaciones de LINQ con un método que cambia la variable es aplicado a (es decir, un método de instancia del objeto).

operaciones LINQ (es decir, el .OrderBy) devuelve una consulta . Es no realizar la operación en su objeto (es decir, lst).

necesita asignar el resultado de esa consulta de nuevo a la variable:

lst = lst.OrderBy(p => p).ToList(); 

en LINQ jerga.

1
string[] words = { "bac", "abc", "cab" }; 

var sortedWords = from w in words 
        orderby w 
        select w; 

Console.WriteLine("The sorted list of words:"); 

foreach (var w in sortedWords) 
{ 
    Console.WriteLine(w); 
} 
Cuestiones relacionadas