Utilizando método Sort em uma lista genérica


por Ebenézer de Souza em 17/8/2010

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

/// Idade 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

/// Comparação entre osalunos

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() + "
"
);

}

Execute o site e veja na imagem abaixo comodeverá ser exibido na tela:

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.

voltar   comente  subir

 
Ebenézer de Souza Possui Superior em Bacharelado em Sistemas de informação e é desenvolvedor de aplicações e sistemas web na plataforma .NET. Atua como analista/programador na Corretora de Seguros BRB e escreve artigos para comunidade ECodigo.com.br



Comentários:

Comente (dê sua opinião):
Comentário:
Código Imagem:  (digite o código da imagem respeitando maiúsculo e minúsculo)

Favor digitar o código da imagem para cadastramento.

 

Outros Artigos do Autor

Criando um método para exibir vários alerts na tela
Utilizando método Sort em uma lista genérica
Criando parâmetros não obrigatórios em procedures
Criando uma DLL de acesso a dados Genérica utilizando o namespace System.Data.Comom
Neste artigo irei mostrar como utilizar o controle ImageMap que veio na versão 2.0 do Asp.NET.
Adicionar primeiro dados em um GridView e depois na base de dados usando Transaction.
Pesquisando informações que estejam entre as datas Informadas com Stored Procedure.
Criar um post de Mensagens sem utilizar banco de dados e sim arquivos.
Utilizando DLL de acesso a dados genérica – Parte 1