Sunteți pe pagina 1din 5

Listas (Arrays dinâmicos)

Para trabalhar com estruturas agregadas de dados, o framework DotNet


provê um grupo de classes de coleções (collections) – arrays, lists e
maps – que podem armazenar uma grande variedade de objetos e tipos
pré-definidos. As coleções são dimensionadas dinamicamente.

Só para relembrar, arrays são estruturas de dados unidimensionais que


armazenam dados na memória de forma contígua (ou seja, posições
internas do array ficam todas juntinhas dentro da memória). Um array
permite um acesso muito rápido a qualquer posição interna uma vez
que o endereço de memória daquela posição pode ser calculado
multiplicando-se o índice do elemento pelo tamanho do tipo de elemento
armazenado (chamamos o resultado dessa conta de deslocamento) e
adicionando-se esse resultado ao endereço base (inicial) do array na
memória. Porém, os arrays são muito complicados de usar se você tem
que inserir elementos internamento a ele, uma vez que, as posições que
vêm depois daquela, que será inserida, têm que ser todas deslocadas
para abrir espaço para o novo elemento que vai entrar.

As listas (list) são similares aos arrays, mas sua forma de


armazenamento é bem diferente. Cada elemento (também chamado
“nó”) em uma lista inclui um ponteiro para o elemento anterior e um
ponteiro para o elemento posterior, criando assim o que chamamos de
lista duplamente encadeada. É muito fácil inserir ou retirar um
elemento da lista além do fato de que as listas podem ser aumentas ou
diminuídas à vontade.

Para nós programadores o que realmente é importante é que as listas


são uma forma mais versátil de utilizar armazenamento de conjuntos de
dados. Ou seja, são como uma evolução dos arrays.

Trabalhando com listas

Utilizar uma lista é tão simples quanto utilizar um array. Vejamos


primeiramente como definir uma lista, por exemplo, de números
inteiros.

System.Collections.Generic.List <int> Sequencia;


Repare que o namespace necessário para a utilização das listas é o
System.Collections.Generic. A classe List pede um tipo entre os sinais de
< e >. Nesse caso, colocamos int já que queremos criar uma lista de
inteiros. Contudo, nós fizemos somente a declaração da lista. Temos
que defini-la ainda. É o que faremos a seguir:

Sequencia = new System.Collections.Generic.List<int>();

Agora já podemos trabalhar com a lista. O trabalho com a lista é


normalmente inserir elementos dela, remover elementos dela e visitar
os elementos da lista.

Para inserir um elemento na lista podemos fazer o seguinte:

Sequencia.Add(3);

Com isso colocamos um novo elemento na lista que guarda o valor 3.

Também é possível remover um elemento de uma lista:

Sequencia.Remove(3);

Repare que como a lista pode ter várias incidências do número 3,


apenas a primeira incidência encontrada será retirada. Mais adiante,
você verá que existem métodos que possibilitam a remoção de todas as
incidências ou de uma incidência em uma posição específica.

Para obter um valor de uma lista fazemos o seguinte:

numero = Sequencia[5];

Esse comando retornará o valor que está armazenado na lista


seqüência, na sexta posição (lembre-se que como com os arrays as
listas também são baseadas em contagem começada por zero), e
armazenará esse valor na variável numero.

Se quisermos visitar todos os elementos de uma lista podemos fazer


isso utilizando o for. Veja:

for (contador=0; contador< Sequencia.Count; contador++)

Console.WriteLine(sequencia[contador];

}
Fizemos um for que vai de 0 (posição inicial) até a posição anterior a
sequencia.Count (Count é uma propriedade que diz quantos elementos a
lista contém no momento).

Também pode ser utilizado o for each:

foreach (int valor in Sequencia)


{
MessageBox.Show(valor.ToString());

Aqui utilizamos uma variável auxiliar valor que a cada iteração (rodada)
recebeu um dos elementos internos da lista sequencia. Cada valor é
mostrado em uma message box.

Propriedades e métodos interessantes de uma lista

Count  Propriedade que diz o número de elementos contidos na lista.

Add  Adiciona um novo elemento no final da lista.

Clear  Remove todos os elementos de uma lista.

Find  Procura por um elemento e retorna a primeira ocorrência desse


elemento na lista.

FindIndex  Procura por um elemento e retorna o primeiro índice onde


ele foi encontrado.

FindLast  Procura por um elemento e retorna o último índice onde ele


foi encontrado.

Insert  Insere um elemento dentro da lista na posição especificada.

Remove  Remove a primeira ocorrência de um elemento da lista.

RemoveAll  Remove todas as ocorrências de um elemento da lista.

RemoveAt  Remove o elemento na posição especificada pelo índice.

Reverse  Reverte a ordem dos elementos da lista.

Sort  Ordena os elementos de uma lista.


Um exemplo utilizando lista (retirado da MSDN)
using System;
using System.Collections.Generic;

public class Example


{
public static void Main()
{
List<string> dinosaurs = new List<string>();

Console.WriteLine("\nCapacity: {0}", dinosaurs.Capacity);

dinosaurs.Add("Tyrannosaurus");
dinosaurs.Add("Amargasaurus");
dinosaurs.Add("Mamenchisaurus");
dinosaurs.Add("Deinonychus");
dinosaurs.Add("Compsognathus");

Console.WriteLine();
foreach(string dinosaur in dinosaurs)
{
Console.WriteLine(dinosaur);
}

Console.WriteLine("\nCapacity: {0}", dinosaurs.Capacity);


Console.WriteLine("Count: {0}", dinosaurs.Count);

Console.WriteLine("\nContains(\"Deinonychus\"): {0}",
dinosaurs.Contains("Deinonychus"));

Console.WriteLine("\nInsert(2, \"Compsognathus\")");
dinosaurs.Insert(2, "Compsognathus");

Console.WriteLine();
foreach(string dinosaur in dinosaurs)
{
Console.WriteLine(dinosaur);
}

Console.WriteLine("\ndinosaurs[3]: {0}", dinosaurs[3]);

Console.WriteLine("\nRemove(\"Compsognathus\")");
dinosaurs.Remove("Compsognathus");

Console.WriteLine();
foreach(string dinosaur in dinosaurs)
{
Console.WriteLine(dinosaur);
}

dinosaurs.TrimExcess();
Console.WriteLine("\nTrimExcess()");
Console.WriteLine("Capacity: {0}", dinosaurs.Capacity);
Console.WriteLine("Count: {0}", dinosaurs.Count);
dinosaurs.Clear();
Console.WriteLine("\nClear()");
Console.WriteLine("Capacity: {0}", dinosaurs.Capacity);
Console.WriteLine("Count: {0}", dinosaurs.Count);
}
}

/* Esse código produz a seguinte saída:

Capacity: 0

Tyrannosaurus
Amargasaurus
Mamenchisaurus
Deinonychus
Compsognathus

Capacity: 8
Count: 5

Contains("Deinonychus"): True

Insert(2, "Compsognathus")

Tyrannosaurus
Amargasaurus
Compsognathus
Mamenchisaurus
Deinonychus
Compsognathus

dinosaurs[3]: Mamenchisaurus

Remove("Compsognathus")

Tyrannosaurus
Amargasaurus
Mamenchisaurus
Deinonychus
Compsognathus

TrimExcess()
Capacity: 5
Count: 5

Clear()
Capacity: 5
Count: 0
*/

S-ar putea să vă placă și