Ordenar una lista por un campo en C#

Saad Aslam 12 octubre 2023
  1. Use el método Sort() para ordenar una lista por archivada en C#
  2. Utilice el método OrderBy() para ordenar una lista por archivada en C#
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
Autor: Saad Aslam
Saad Aslam avatar Saad Aslam avatar

I'm a Flutter application developer with 1 year of professional experience in the field. I've created applications for both, android and iOS using AWS and Firebase, as the backend. I've written articles relating to the theoretical and problem-solving aspects of C, C++, and C#. I'm currently enrolled in an undergraduate program for Information Technology.

LinkedIn

Artículo relacionado - Csharp List