Ordenar un List o IList

16/01/2007 - 18:31 por ANT1 | Informe spam
Como se hace para ordenar una lista List<> o IList<> generica de una
clase propia con sus propiedades internas (sus strings, ints, doubles,
...).

He estado mirando las interfaces Icomparable e Icomparer pero soy
incapaz de comprenderlas.

¿Alguien puede echarme un cable?
 

Leer las respuestas

#1 Alberto Poblacion
16/01/2007 - 18:50 | Informe spam
"ANT1" wrote in message
news:
Como se hace para ordenar una lista List<> o IList<> generica de una
clase propia con sus propiedades internas (sus strings, ints, doubles,
...).

He estado mirando las interfaces Icomparable e Icomparer pero soy
incapaz de comprenderlas.



Hay dos formas de hacerlo: Llamando a MiLista.Sort(), o a
MiLista.Sort(comparador). En el primer caso, los objetos de la lista se
ordenan llamando al comparador de la clase de los objetos, y en el segundo
se escribe por separado una clase comparadora, se crea una instancia de
ella, y se le pasa como argumento al Sort. Quizá sea un poco más simple de
entender el primer caso:

Supongamos que tienes un lista List<Empleado>, donde tu clase empleado
tiene dentro datos como Nombre, DNI, etc. ¿Qué se entiende por ordenarla? Se
trata de poner los empleados en un cierto orden, de menor a mayor, para lo
cual hay que definir qué significa que "un empleado es mayor que otro". Por
ejemplo, si quisiéramos ordenarlos por orden alfabético de Nombre, entonces
entenderíamos que es mayor el que tenga un nombre que quede más adelante en
el alfabeto. Esto es precisamente lo que tiene que decirnos la función
Compare que meteremos dentro de la clase Empleado, que debe devolver -1, 0 o
1 en función del resultado de la comparación.

Aqui va un ejemplo en el que usamos un comparador de tipo Generic
(también se puede usar uno tradicional con argumentos de tipo Object):

public class Empleado: IComparable<Empleado>
{
public string Nombre;
...
public int CompareTo(Empleado elOtro)
{
return this.Nombre.CompareTo(elOtro.Nombre);
}
}

...

List<Emplado> lista = new List<Empleado>;
lista.Add(new Empleado(...));
lista.Add(new Empleado(...));
lista.Add(new Empleado(...));
lista.Sort();

Preguntas similares