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