C# - Ordenando uma lista de objetos - I


 Hoje veremos como classificar uma lista de objetos usando Comparison<T> e a seguir vamos mostrar como fazer isso com uma implementação de ICompare<T>.

Para classificar uma lista de objetos, podemos usar o método Sort() que executa a classificação local. A classificação pode ser feita usando um delegate Comparison<T> ou através de uma implementação IComparer<T>.

Vamos iniciar usando o delegate Comparison<T>.

1- Usando o delegate Comparison<T>

Um delegate de comparação é usado para ordenar objetos que não têm uma ordem natural. Se passado para um método de ordenação, permite um controle preciso sobre a ordem de classificação dos elementos.

Um delegado de comparação pode ser implementado por meio de métodos anônimos, que permitem que blocos de código sejam passados como parâmetros em vez de um método separado.

Vejamos um exemplo onde vamos classificar uma lista de objetos do tipo Aluno por sua idade usando o delegate Comparison<T>.

Vamos usar um projeto do tipo Console(.NET Core) criado no VS 2019 onde temos a classe Aluno:

Para realizar a classificação podemos definir o código abaixo na classe Program:

Aqui usamos o método Sort() usando um delegate Comparison<T> usados para comparar os elementos da lista onde os elementos da lista são classificados usando o método representado pelo delegate.

Podemos usar expressões lambda para obter uma maneira mais concisa de escrever o bloco de código embutido e assim simplificar o código.

Assim podemos substituir :


  alunos.Sort(delegate (Aluno x, Aluno y)
  {
      return x.Idade.CompareTo(y.Idade);
  });

 

por :


   alunos.Sort((x, y) => x.Idade.CompareTo(y.Idade));
 

Obtendo o mesmo resultado abaixo:

Na próxima parte do artigo vamos mostrar outra abordagem implementando IComparer<T>.

Pegue o projeto aqui: CShp_ClassificarLista1.zip

Referências:


José Carlos Macoratti