¿Cómo ordenar la array de objetos por propiedad específica en C#?

Ordenar básicamente significa organizar un conjunto dado de elementos en un orden específico. Hay dos órdenes en los que podemos clasificar el conjunto dado de elementos, ya sea en orden ascendente o descendente. Por ejemplo, tenemos un conjunto que [2, 3, 16, 10], ahora podemos ordenar este conjunto de elementos en orden ascendente que es [2, 3, 10, 16] o podemos ordenar este conjunto de elementos en orden descendente orden que es [16, 10, 3, 2] según nuestro requisito. En C#, podemos ordenar la array de objetos por propiedad específica usando las siguientes formas:

  • Array.ordenar()
  • consulta LINQ

Método Array.sort()

El método Array.sort() se usa para ordenar los elementos de una array. Hay un total de 17 versiones sobrecargadas de este método disponibles, de las cuales podemos usar el siguiente método para ordenar una array de objetos por una propiedad específica. 

Sintaxis:

Ordenar (array, IComparer) Método

Aquí, array representa una array que debe ordenarse e IComparer es una interfaz genérica.

Excepciones: Lanzará las siguientes excepciones:

  • ArgumentNullException: cuando la array pasada es nula.
  • InvalidOperationException: si uno o más elementos de la array no siguen la interfaz genérica IComparable<T>.

Ejemplo: En este programa, los elementos de la array estudiantes son de tipo Estudiante. Se han ordenado según el Apellido de cada alumno. La lógica se implementa en el método Compare() del método de clase StudentComparer.

C#

// C# program to sort object array by specific property 
using System;
using System.Collections;
  
class GFG{
  
// Comparator class
// to sort according to last name
class StudentComparer : IComparer
{
    public int Compare(object x, object y)
    {
        return(new CaseInsensitiveComparer()).Compare(((Student)x).LastName,
               ((Student)y).LastName);
    }
}
  
// Student class
class Student 
{
    public int Id
    {
        get;
        set;
    }
    public string FirstName
    {
        get;
        set;
    }
    public string LastName
    {
        get;
        set;
    }
}
  
// Driver code
static public void Main()
{
      
    // Initializing an array of Student type
    Student[] students = {
             
            // Initializing using constructors
            new Student(){ FirstName = "Bhuwanesh",
                           LastName = "Nainwal" },
            new Student(){ FirstName = "Anil",
                           LastName = "Thapa" },
            new Student(){ FirstName = "Hitesh",
                           LastName = "Kumar" } 
    };
        
      // Calling sort method by passing comparator
      // function as an argument
     Array.Sort(students, new StudentComparer());
        
      // Print array elements
    foreach(var item in students)
    {
        Console.WriteLine(item.FirstName + ' ' + 
                          item.LastName);
    }
}
}
Producción

Hitesh Kumar
Bhuwanesh Nainwal
Anil Thapa

Usando la consulta LINQ

También podemos ordenar la array de objetos usando las consultas LINQ. La sintaxis de consulta LINQ comienza con la palabra clave from y termina con la palabra clave Selector GroupBy. Después de usar from la palabra clave, puede usar diferentes tipos de operaciones de consulta estándar, como filtrado, agrupación, etc., según sus necesidades en la consulta.

Acercarse:

1. En primer lugar, debemos agregar el espacio de nombres System.Linq en el código.

using System.Linq;

2. Luego, necesitamos hacer una colección de elementos o fuentes de datos sobre los cuales realizaremos operaciones. Por ejemplo:

List list = new List(){
    {"FirstName1", "LastName1"},
    {"FirstName2", "LastName2"},
    {"FirstName3", "LastName3"},
    {"FirstName4", "LastName4"}
};

Aquí, cada elemento es de tipo estudiante y tiene los siguientes miembros de datos: FirstName y LastName

3. Luego, crearemos la consulta utilizando las palabras clave de consulta como orderby, select, etc. Por ejemplo:

var qry = from s in list
          orderby s.FirstName/LastName
          select s;

Aquí qry es la variable de consulta que almacenará el resultado de la expresión de consulta. La cláusula from se utiliza para especificar el origen de los datos, es decir, la cláusula list, orderby los organizará en el orden especificado y la cláusula select proporciona el tipo de elementos devueltos. 

4. El último paso es ejecutar la consulta mediante un bucle foreach. Por ejemplo:

Array.ForEach<Student>(qry.ToArray<Student>(), 
                       s => Console.WriteLine(s.FirstName + " " + 
                                              s.LastName));

Ejemplo: En este programa, hemos ordenado la array de elementos dada (de tipo Estudiante) de acuerdo con la propiedad Apellido.

C#

// C# program to sort object array by specific property 
using System;
using System.Collections;
  
class GFG{
  
// Comparator class
// to sort according to last name
class StudentComparer : IComparer
{
    public int Compare(object x, object y)
    {
        return(new CaseInsensitiveComparer()).Compare(((Student)x).LastName,
               ((Student)y).LastName);
    }
}
  
// Student class
class Student 
{
    public int Id
    {
        get;
        set;
    }
    public string FirstName
    {
        get;
        set;
    }
    public string LastName
    {
        get;
        set;
    }
}
  
// Driver code
static public void Main()
{
      
    // Initializing an array of Student type
    Student[] students = {
             
            // Initializing using constructors
            new Student(){ FirstName = "Bhuwanesh",
                           LastName = "Nainwal" },
            new Student(){ FirstName = "Anil",
                           LastName = "Thapa" },
            new Student(){ FirstName = "Hitesh",
                           LastName = "Kumar" } 
    };
        
      // Calling sort method by passing comparator
      // function as an argument
     Array.Sort(students, new StudentComparer());
        
      // Print array elements
    foreach(var item in students)
    {
        Console.WriteLine(item.FirstName + ' ' + 
                          item.LastName);
    }
}
}
Producción

Hitesh Kumar
Bhuwaneh Nainwal
Anil Thapa

Publicación traducida automáticamente

Artículo escrito por bhuwanesh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *