Utilizando método Sort em uma lista genérica
Sort é uma forma muito inteligente de
Olá a todos, irei mostrar neste artigo como utilizar ométodo Sort para ordenar uma lista genérica utilizando a delegate Comparison. Nesteexemplo estarei utilizando o Visual Studio 2008 e .NET Framework 3.5.
Neste primeiro momento vamos criar um objeto com o nomeAluno e prepará-lo para fazer a ordenação. Crie um novo WebSite e acrescente uma nova classe com o nome Alunoconforme imagem abaixo:
Na classe Aluno digite o seguinte código:
///
/// Classe do objeto Aluno
///
public class Aluno
{
///
/// Construtor Default
///
publicAluno()
{ }
///
/// Construtor que já carrega as propriedade
///
/// Nome do Aluno
///
publicAluno(string nome, intidade)
{
Nome = nome;
Idade = idade;
}
///
/// Propriedade Nome do Aluno
///
public string Nome { get; set; }
///
/// Propriedade Idade do Aluno
///
public int Idade { get; set; }
}
Para que possamos utilizar a delegate Comparion vamosacrescentar mais dois métodos na classe usuário, uma para fazer a comparação donome e outro para idade, ou seja, para fazer a ordenação tanto pelo nome comopela idade do aluno. Acrescente os doismétodos abaixo:
///
/// Executa a comparação entre os nomes para ordenação
///
///
///
///
public static intOrdenaPorNome(Aluno al1, Aluno al2)
{
returnal1.Nome.CompareTo(al2.Nome);
}
///
/// Executa a comparação entre as idades para ordenação
///
///
///
///
public static intOrdenaPorIdade(Aluno al1, Aluno al2)
{
returnal1.Idade.CompareTo(al2.Idade);
}
Com isto o nosso objeto está preparado para ser ordenado. Para testarmos vamos criar uma lista deAlunos. No método Page_Load da páginaDefault.aspx digite o seguindo código:
// Cria lista deAlunos
List<Aluno> alunos = newList<Aluno>();
// Adicionavários alunos na lista
alunos.Add(new Aluno("Denis", 17));
alunos.Add(new Aluno("João", 16));
alunos.Add(new Aluno("Alberto", 20));
alunos.Add(new Aluno("MaurÃcio", 13));
alunos.Add(new Aluno("Caio",15));
Antes de prosseguir neste método vamos criar outro métodoque irá receber como parâmetro uma string informando se é para ordenar pelonome ou pela idade. Segue o método abaixo:
///
/// Método que retorna a comparação para ordenar a lista
///
/// Ordenar Por
///
private Comparison<Aluno>getComparison(string ordenar_por)
{
// Verifica se épara ordenar por nome ou por idade
if(ordenar_por.Equals("Nome"))
{
// Retornaordenação por Nome
return new Comparison<Aluno>(Aluno.OrdenaPorNome);
}
else
{
// Retornaordenação por Idade
return new Comparison<Aluno>(Aluno.OrdenaPorIdade);
}
}
Veja neste método que de acordo com o que é para ordenar eleretorna uma nova comparação de aluno passando o método static criado na classeusuário.
Prosseguindo no método Page_Load vamos utilizar agora ométodo Sort da lista de alunos passandocomo parâmetro o retorno do métodogetComparison que acabamos de criar e ao chamar o método getComparison iremos passar a string com o valor nome. Vejaa linha de código para isso:
// Adiciona nométodo sort a ordenação por nome.
alunos.Sort(getComparison("Nome"));
Agora precisamos exibir a lista para verificarmos que tevesucesso a ordenação. Para isso segue o código abaixo:
// Percorre cadaaluno da lista
foreach (Aluno aluno inalunos)
{
// Escreve na telao Nome do aluno e a Idade
Response.Write("Nome:" + aluno.Nome + " Idade: "+ aluno.Idade.ToString() + "
");
}
Veja que a lista foi ordenada pelo nome do aluno conformepedimos. Como nesse exemplo também tem a possibilidade de ordenar por idade,basta alterar o parâmetro do método getComparison para idade e executarnovamente que você terá o seguinte resultado:
Espero ter ajudado, qualquer dúvida ou sugestões comentem pelo site.
Obrigado e até a próxima.