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);
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); }
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é!
Escreva um comentário