Listas em C# – A classe genérica List

Listas em C#

Uma lista em C# é um objeto que armazena dados de um determinado tipo em uma ordem específica. Representa uma lista fortemente tipada de objetos que podem ser acessados por meio de um número de índice. O tipo de dado que a lista armazena é definido usando a sintaxe de genéricos. Por exemplo, vamos definir uma lista genérica de nome valores que irá armazenar números inteiros:

List<int> valores = new List<int>();

As listas em C# fazem parte do namespace System.Collection.Generic.

Diferença entre lista e array em C#

A diferença entre listas e arrays é a de que as listas possuem tamanho dinâmico (ajustável), ao passo que os arrays possuem tamanho fixo. Por conta disso, as listas são indicadas para quando não sabemos de antemão a quantidade de dados que serão armazenados. Uma lista armazena itens de um tipo especificado e cresce automaticamente quando novos itens (do mesmo tipo) são adicionados.

As listas são ideais para o armazenamento e recuperação de grandes números de elementos, como retornos de consultas a bancos de dados, por exemplo. Sua capacidade máxima em um sistema de 64 bits é de 2 bilhões de elementos. A capacidade de uma lista pode ser acessada ou ajustada por meio da propriedade Capacity.

Vamos estudar algumas operações que podem ser realizadas em listas em C#, usando Windows Forms e o Visual Studio para codificar nossos testes.

Propriedades e métodos da classe List<T>

A seguir temos algumas das principais propriedades e métodos da classe List<T> em C#:

Propriedades

  • Items – Obtém ou grava o elemento na posição de índice especificada
  • Count – Retorna o número total de elementos que existem na lista.

Métodos

  • Add – Adiciona um elemento ao final da lista
  • AddRange – Adiciona elementos de uma coleção especificada ao final da lista
  • Clear – Remove todos os elementos de uma lista
  • Contains – Verifica se um elemento especificado existe ou não em uma lista
  • Insert – Insere um elemento em uma posição (índice) especificada na lista
  • Remove – Remove a primeira ocorrência de um elemento especificado
  • RemoveAt – Remove o elemento em uma posição especificada na lista
  • Sort – Ordena os elementos da lista 

Inserir items em uma lista

Após inicializar uma lista, podemos inserir valores invocando o método Add():

List<int> valores = new List<int>();
valores.Add(16);
valores.Add(18);
valores.Add(23);
valores.Add(12);

Alternativamente, podemos inserir um array de itens de uma só vez usando o método AddRange():

List<int> valores = new List<int>();
int[] numeros = new int[] {16, 18, 23, 12};
valores.AddRange(numeros);

Contar os elementos da lista

Com o método Count podemos determinar quantos elementos uma lista possui:

List<int> valores = new List<int>();
int[] numeros = new int[] { 16, 18, 23, 12 };
valores.AddRange(numeros);
MessageBox.Show("A lista tem " + valores.Count() + " itens.");

Acessar um elemento na lista

Podemos acessar um elemento em uma lista genérica usando seu número de índice, que inicia em 0 (zero). Por exemplo, para acessar o primeiro elemento da lista do exemplo anterior podemos adicionar a seguinte linha de código:

MessageBox.Show("Primeiro item da lista: " + valores[0]);

Perceba a notação de colchetes usada para especificar o elemento 0 da lista: [0].

Remover itens de uma lista em C#

Usamos os métodos Remove e RemoveAt para remover itens de uma lista. O método Remove remove a primeira ocorrência do item especificado, ao passo que o método RemoveAt remove o item em uma posição de índice desejada.
Vamos aos exemplos.

1 – Remover a primeira ocorrência de um item. Vamos remover a primeira ocorrência do valor 18 em uma lista na qual esse valor aparece armazenado em duas posições distintas:

List<int> valores = new List<int>();
int[] numeros = new int[] { 16, 18, 23, 12, 22, 11, 18 };
valores.AddRange(numeros);
string strValores = String.Empty;

foreach (int item in valores)
{
  strValores += "\n" + item.ToString();
}

MessageBox.Show("Lista de valores: " + strValores);

valores.Remove(18); // Remove a primeira ocorrência do valor 18

strValores = String.Empty;
foreach (int item in valores)
{
  strValores += "\n" + item.ToString();
}

MessageBox.Show("Lista de valores: " + strValores);

2 – Agora vamos remover o quarto item da lista (índice 3).

List<int> valores = new List<int>();
int[] numeros = new int[] { 16, 18, 23, 12, 22, 11, 18 };
valores.AddRange(numeros);
string strValores = String.Empty;

foreach (int item in valores)
{
strValores += "\n" + item.ToString();
}

MessageBox.Show("Lista de valores: " + strValores);

valores.RemoveAt(3); // Remove o item no índice 3 (quarto item)
strValores = String.Empty;
foreach (int item in valores)
{
strValores += "\n" + item.ToString();
}
MessageBox.Show("Lista de valores: " + strValores);

Note que o valor 12, que é o quarto valor em nossa lista inicial, foi eliminado.

Inserir itens em uma lista em posição específica

Podemos inserir um elemento em uma lista em uma posição especificada usando o método Insert. Sua sintaxe é como segue:

Lista.Insert(Índice, Valor);

Esse método aceita dois argumentos:

  • Índice – Posição na qual o item será inserido
  • Valor – Valor do item a ser inserido na lista

Vejamos um exemplo. Vamos inserir o valor 13 na posição #2 (índice 1) de uma lista que já continha valores armazenados:

List<int> valores = new List<int>();
int[] numeros = new int[] { 16, 18, 23, 12 };
valores.AddRange(numeros);

MessageBox.Show("Segundo item da lista: " + valores[1]);

valores.Insert(1, 13); // Inserimos o valor 13 na segunda posição da lista
MessageBox.Show("Segundo item da lista: " + valores[1]);

Iterar pelos itens de uma lista

Podemos iterar pelos itens em uma lista genérica usando um laço foreach. Veja no exemplo a seguir, codificado em um botão usando Windows Forms no Visual Studio:

List<int> valores = new List<int>();

valores.Add(16);
valores.Add(18);
valores.Add(23);
valores.Add(12);

string strValores = String.Empty;

foreach(int item in valores)
{
  strValores += "\n" + item.ToString();
}

MessageBox.Show("Lista de valores: " + strValores);

Iteração pelos elementos de uma lista em C#

Procurar um item em uma lista genérica

Com o método Contains podemos descobrir se um valor especificado existe em uma lista, o seja, se esse item está armazenado na lista. Ele retorna o booleano true se o valor for encontrado, e false se não for encontrado na lista. Por exemplo, queremos saber se o valor 16 está presente em uma lista:

List<int> valores = new List<int>();
int[] numeros = new int[] { 16, 18, 23, 12, 22, 11, 18 };
valores.AddRange(numeros);
string strValores = String.Empty;

int valorProcurado = 16;
bool valorExiste;

valorExiste = valores.Contains(valorProcurado);

if (valorExiste)
{
  MessageBox.Show("O item foi encontrado na lista");
}
else
{
  MessageBox.Show("Item inexistente na lista");
}

O método Contains da lista valores retorna true neste exemplo, pois o valor 16 está presente na lista genérica.

Preencher um ListBox com itens de uma lista

Suponha um controle ListBox de nome lstList, o qual queremos preencher com os elementos armazenados em uma lista genérica.

List<string> lugares = new List<string>();

lugares.Add("Fortaleza");
lugares.Add("Buenos Aires");
lugares.Add("Cairo");
lugares.Add("Sydney");
lugares.Add("Lima");
lugares.Add("Toronto");

foreach (string item in lugares)
{
  lstLista.Items.Add(item);
}


Preencher um ListBox com uma lista genérica em C#

A caixa de listagem também pode ser preenchida usando-se o método ToArray da lista, em vez de usar um laço foreach, para passar seus elementos de uma vez à ListBox:

lstLista.Items.AddRange(lugares.ToArray());

Classificar Listas

Podemos classificar (ordenar) uma lista em C# empregando o método Sort(). Por exemplo, para ordenar a lista de valores usada nos exemplos anteriores, basta executarmos:

valores.Sort();

E os itens dentro desta lista estarão ordenados, em ordem numérica crescente.

É isso aí! Nos próximos tutoriais vamos abordar outras estruturas de armazenamento em C#, tais como Filas e Pilhas. Até!

 

Sobre Fábio dos Reis (1337 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Unix, Linux e Open Source em geral, adora Eletrônica e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

Escreva um comentário

Seu e-mail não será divulgado


*