C# - Ordenando uma lista de objetos - II


 Hoje veremos como classificar uma lista de objetos usando Comparison<T> e uma implementação de ICompare<T>.

Continuando a primeira parte do artigo vamos realizar agora a ordenação da lista de objetos através de uma implementação de IComparer<T> e também mostrar uma abordagem implementando IComparable<T>.

2- Implementando IComparer<T>

Outra abordagem que podemos usar é fornecer uma implementação de IComparer<T> personalizada para classificar uma lista usando o método Sort().

A ideia é implementar a interface IComparer<T> em uma classe separada e passar a instância dessa classe para o método Sort().

A classe de implementação precisa substituir o método Compare(), que usa dois objetos. O valor retornado pelo método Compare() decide a ordem relativa do primeiro objeto em relação ao segundo objeto na lista classificada. Um valor negativo, zero e positivo representa que o primeiro objeto é menor, igual ou maior que o segundo objeto.

Com base nisso criamos a classe AlunoComparer que implementa a interface IComparer<Aluno> :

A seguir podemos usar a classe AlunoComparer() para realizar a ordenação :

Obtendo o mesmo resultado abaixo:

3- Implementando IComparable<T>

A interface IComparable<T> define um método de comparação generalizado que implementa uma classe ou um tipo de valor para criar um método de comparação de tipo específico para ordenar ou classificar suas instâncias.

Assim essa interface impõe uma ordem natural aos objetos de cada classe que a implementa. A classe de implementação precisa substituir o método CompareTo(), que compara o objeto atual com o objeto especificado.

O valor retornado pelo método CompareTo() decide a ordem relativa dos objetos na lista classificada. Um valor negativo, zero e positivo representa que o objeto é menor, igual ou maior que o objeto especificado, respectivamente.

No código a seguir, a classe Aluno implementa a interface IComparable<T> e substitui seu método CompareTo(). Os objetos List<Aluno> são então classificados usando o método Sort().

A seguir podemos implementar a ordenação:

O resultado obtido é visto a seguir:

Na próxima parte do artigo veremos como fazer a ordenação usando o LINQ.

Pegue o projeto aqui: CShp_ClassificarLista2.zip

"Bendirei o Senhor, que me aconselha; na escura noite o meu coração me ensina!"
Salmos 16:7

Referências:


José Carlos Macoratti