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:

  1. Si es menor que 0, el objeto A es menor que B
  2. Si es 0, los 2 son iguales
  3. 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

Published 13/3/2007 20:41 por Luis Ruiz Pavón
Archivado en: ,
Comparte este post:
http://geeks.ms/blogs/lruiz/archive/2007/03/13/ordenar-los-elementos-de-un-arraylist-en-orden-descendente.aspx

Comentarios

# re: Ordenar los elementos de un ArrayList en orden descendente

Se agradece la ayuda; muy util

Tuesday, March 18, 2008 6:47 AM por Jorge Romano

# re: Ordenar los elementos de un ArrayList en orden descendente

Alguien me podría decir como crear un arraylist con varias columnas?

Thursday, April 10, 2008 5:06 PM por Alberto

# re: Ordenar los elementos de un ArrayList en orden descendente

Date cuenta que el ArrayList es un contendor de objetos y que para conseguir tener esas columnas que tu quieres sería mejor utilizar un Array, no?

De todas maneras puedes create un objeto (Que hará de fila) que tenga todas las propiedades (Que harán de columnas) y rellenar el ArrayList

Salu2

Friday, April 11, 2008 8:58 AM por Luis Ruiz Pavón

# re: Ordenar los elementos de un ArrayList en orden descendente

Quisiera ordenar un ArrayList según 2 propiedades.

No me funciona (evidentemente) independiente ya que 1 orden me pisa el otro.

Desde ya agradezco la ayuda, Rto.

Thursday, April 17, 2008 1:33 AM por Roberto

# re: Ordenar los elementos de un ArrayList en orden descendente

Buen trabajo, pero quisiera ordenar los objetos de una lista q esta enlazado con un DefaultListModel de igual manera, ascendente y descendente.

Salu2...

Thursday, February 25, 2010 9:29 AM por Marc