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:
C# - Tasks x Threads. Qual a diferença
C# - Programação Assíncrona como : Asycn e Task
C# - O Struct Guid - Macoratti.net