Ordenar los elementos de un ArrayList en orden descendente
En las newsgroup de ASP.NET me preguntaban como se podían ordenar los elementos de un ArrayList en orden descendente para asignarselo a un repeater, ya que por defecto te lo ordena en orden ascendente. Este ejemplo es válido para cualquier colección que utilice el método Sort:
Para ello hay que saber un poco acerca del método Sort y como trabaja:
El método Sort utiliza para la ordenación una clase Comparadora .Esta clase Comparadora implementa la interfaz IComparer y dicha interfaz nos obliga a implementar el método Compare que es llamado por defecto por el método Sort, y que acepta 2 argumentos, objeto A y objeto B, y retorna un integer que nos indica el resultado de la comparación:
- Si es menor que 0, el objeto A es menor que B
- Si es 0, los 2 son iguales
- Si es mayor que 0, el objeto A es mayor que B
Y depués de este rollo vamos a ver como modificamos esa ordenación por defecto:
El método Sort nos permite especificar una clase Comparadora (Debe implementar la interfaz IComparer) para evitar usar la que utiliza por defecto, así pues vamos a crearnos una para la ordenación descendente:
1: public class OrdenacionDescendente : IComparer
2: { 3: CaseInsensitiveComparer _comparer = new CaseInsensitiveComparer();
4:
5: public int Compare(object x, object y)
6: { 7: return _comparer.Compare(y, x);
8: }
9: }
Y ahora sólo nos falta utilizarla:
1: ArrayList ar = new ArrayList();
2: ar.Add("Juan"); 3: ar.Add("Alberto"); 4: ar.Add("Bea"); 5: ar.Add("Mario"); 6:
7: ar.Sort();
8:
9: Response.Write("Ordenación por defecto</br>"); 10: foreach (string nombre in ar)
11: { 12: Response.Write("Nombre: " + nombre + "</br>"); 13: }
14:
15: ar.Sort(new OrdenacionDescendente());
16:
17: Response.Write("Ordenación descendente</br>"); 18: foreach (string nombre in ar)
19: { 20: Response.Write("Nombre: " + nombre + "</br>"); 21: }
Y el resultado:
Ordenación por defecto
Nombre: Alberto
Nombre: Bea
Nombre: Juan
Nombre: Mario
Ordenación descendente
Nombre: Mario
Nombre: Juan
Nombre: Bea
Nombre: Alberto
Y para otro caso,sólo tienes que crearte tu clase Comparadora y pasársela al método Sort.
Salu2