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); } } }
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); } } }
Hitesh Kumar Bhuwaneh Nainwal Anil Thapa