HOWTO · Csharp
Ordenar una lista por un campo en C#
En este artículo, explicaré cómo ordenar una lista por un campo en C#.
Este artículo presentará cómo usar la función Sort() de C# y la palabra clave OrderBy() de LINQ para ordenar una lista en orden ascendente y descendente.
Primero, tenemos que importar las bibliotecas necesarias para usar las funciones derivadas de ellas en nuestro ejemplo.
using System;
using System.Linq;
using System.Collections.Generic;
Cree una clase llamada PersonData, y dentro de ella, defina una variable llamada name, con el tipo de datos cadena con su constructor y un método que convertirá una entrada en un valor de cadena y lo devolverá.
public class PersonData {
public string name;
public PersonData(string name) {
this.name = name;
}
public override string ToString() {
return name;
}
}
Luego declararemos 5 variables con el tipo de datos PersonData y les asignaremos algunos valores de cadena.
PersonData tom = new PersonData("Tom");
PersonData roger = new PersonData("Roger");
PersonData fred = new PersonData("Fred");
PersonData jack = new PersonData("Jack");
PersonData anna = new PersonData("Anna");
Para implementar la clasificación en estos campos, necesitamos crear una lista e insertar estos datos en la lista mergedList.
List<PersonData> mergedList = new List<PersonData>() { tom, roger, fred, jack, anna };
Use el método Sort() para ordenar una lista por archivada en C#
Esta es la primera forma de ordenar una lista en orden ascendente. Simplemente llamaremos a ese nombre de lista, definido en el bloque de código superior con la función Sort(), y pasaremos dos argumentos en función de los cuales se compararán los valores para ordenarlos en orden ascendente.
mergedList.Sort((x, y) => {
int ret = String.Compare(x.name, y.name);
return ret;
});
Ejemplo:
using System;
using System.Linq;
using System.Collections.Generic;
public class PersonData {
public string name;
public PersonData(string name) {
this.name = name;
}
public override string ToString() {
return name;
}
}
public class SortList {
public static void Main() {
PersonData tom = new PersonData("Tom");
PersonData roger = new PersonData("Roger");
PersonData fred = new PersonData("Fred");
PersonData jack = new PersonData("Jack");
PersonData anna = new PersonData("Anna");
List<PersonData> mergedList = new List<PersonData>() { tom, roger, fred, jack, anna };
mergedList.Sort((x, y) => {
int ret = String.Compare(x.name, y.name);
return ret;
});
Console.WriteLine(String.Join(Environment.NewLine, mergedList));
}
}
La salida de la lista Antes de ordenar:
Tom
Roger
Fred
Jack
Anna
La salida de la lista Después de ordenar:
Anna
Fred
Jack
Roger
Tom
Después de ordenar la lista en orden ascendente, simplemente puede llamar al método Reverse() para ordenarla en orden descendente:
mergedList.Reverse();
La salida de la lista en orden descendente es la siguiente:
Tom
Roger
Jack
Fred
Anna
Utilice el método OrderBy() para ordenar una lista por archivada en C#
Este es el método alternativo para clasificar una lista en orden ascendente. Simplemente llamaremos al nombre de la lista creada en el bloque de código anterior usando el método OrderBy() y dando un argumento contra el cual se verificarán los valores para clasificarlos en orden ascendente.
Sintaxis:
List<PersonData> sortedList = mergedList.OrderBy(x => x.name).ToList();
Ejemplo:
using System;
using System.Linq;
using System.Collections.Generic;
public class PersonData {
public string name;
public PersonData(string name) {
this.name = name;
}
public override string ToString() {
return name;
}
}
public class SortList {
public static void Main() {
PersonData tom = new PersonData("Tom");
PersonData roger = new PersonData("Roger");
PersonData fred = new PersonData("Fred");
PersonData jack = new PersonData("Jack");
PersonData anna = new PersonData("Anna");
List<PersonData> mergedList = new List<PersonData>() { tom, roger, fred, jack, anna };
List<PersonData> sortedList = mergedList.OrderBy(x => x.name).ToList();
Console.WriteLine(String.Join(Environment.NewLine, sortedList));
}
}
La salida de la lista Antes de ordenar:
Tom
Roger
Fred
Jack
Anna
La salida de la lista Después de ordenar:
Anna
Fred
Jack
Roger
Tom
Para ordenar esta lista en orden descendente, simplemente puede llamar a una función Reverse() después de haber ordenado la lista en orden ascendente como se muestra a continuación:
List<PersonData> sortedList = mergedList.OrderBy(x => x.name).ToList();
sortedList.Reverse();
La salida de la lista en orden descendente es la siguiente:
Tom
Roger
Jack
Fred
Anna