C# proporciona una interfaz IComparable. Esta interfaz proporciona diferentes tipos de métodos de comparación específicos del tipo, lo que significa que un tipo de valor o una clase pueden implementar esta interfaz para ordenar sus instancias porque no podemos ordenar las instancias de una clase directamente porque el compilador no sabe sobre qué base ordenar. De manera similar, comparar directamente dos instancias arrojará un error del compilador ya que el compilador se confunde sobre qué comparar.
Sintaxis:
interfaz pública IComparable
La implementación de la interfaz IComparable requiere:
- Agregar un método CompareTo() que recibe un objeto y devuelve un número entero.
- El objeto entrante primero se convierte en tipo como el tipo de clase y se almacena en una variable temporal. Luego se compara con una propiedad del método actual.
- El método CompareTo() dependiendo de la comparación:
- devuelve 0, si la propiedad de la instancia actual es igual a la propiedad de la variable temporal
- devuelve 1, si la propiedad de la instancia actual es mayor que la propiedad de la variable temporal
- devuelve -1, si la propiedad de la instancia actual es menor que la propiedad de la variable temporal
Ahora analicemos cómo implementar la interfaz IComparable con la ayuda del siguiente ejemplo.
Ejemplo: A continuación se muestra la implementación de la interfaz IComparable. en este ejemplo clasificamos a los empleados según su ID de empleado.
C#
// C# program to demonstrate how to // implement IComparable interface using System; using System.Collections.Generic; class GFG{ // Driver code static public void Main() { // Create an array of employees // using collection initializer Employee[] employees = new Employee[] { new Employee(1, "Susmita"), new Employee(5, "Soniya"), new Employee(3, "Rohit"), new Employee(2, "Mohit"), new Employee(4, "Pihu") }; // Displaying the employee's array before sorting Console.WriteLine("Before sorting employees array"); foreach(var emp in employees) { Console.WriteLine("ID - {0}, Employee Name - {1}", emp.ID, emp.EmployeeName); } // Sorts the employees array in ascending // order on basis of id of the employee Array.Sort(employees); Console.WriteLine(); // Printing the employee's array after sorting Console.WriteLine("After sorting employees array"); foreach(var emp in employees) { Console.WriteLine("ID - {0}, Employee Name - {1}", emp.ID, emp.EmployeeName); } } } // Implementing IComparable interface public class Employee : IComparable{ public int ID; public string EmployeeName; // Employee constructor public Employee(int id, string employeename) { this.ID = id; this.EmployeeName = employeename; } // Implementation of the CompareTo() method which takes // an object as an input and return integer value depending on // the comparison between current object and incoming object, public int CompareTo(object incomingobject) { // Storing incoming object in temp variable of // current class type Employee incomingemployee = incomingobject as Employee; return this.ID.CompareTo(incomingemployee.ID); } }
Producción:
Before sorting employees array ID - 1, Employee Name - Susmita ID - 5, Employee Name - Soniya ID - 3, Employee Name - Rohit ID - 2, Employee Name - Mohit ID - 4, Employee Name - Pihu After sorting employees array ID - 1, Employee Name - Susmita ID - 2, Employee Name - Mohit ID - 3, Employee Name - Rohit ID - 4, Employee Name - Pihu ID - 5, Employee Name - Soniya
Publicación traducida automáticamente
Artículo escrito por biswalashish1997 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA