Partilhar via


Saiba como gerir coleções de dados com a Lista<T> em C#

Este tutorial introdutório fornece uma introdução à linguagem C# e às noções básicas da List<T> classe.

Pré-requisitos

O tutorial espera que tenha uma máquina configurada para desenvolvimento local. Consulte Configurar o ambiente local para obter instruções de instalação e uma descrição geral do desenvolvimento de aplicações no .NET.

Se preferir executar o código sem ter de configurar um ambiente local, veja a versão interativa no browser deste tutorial.

Um exemplo de lista básica

Crie um diretório com o nome list-tutorial. Torne-o no diretório atual e execute dotnet new console.

Importante

Os modelos C# para .NET 6 utilizam instruções de nível superior. A aplicação poderá não corresponder ao código neste artigo, se já tiver atualizado para o .NET 6. Para obter mais informações, veja o artigo sobre Novos modelos C# gerar instruções de nível superior

O SDK .NET 6 também adiciona um conjunto de diretivas implícitasglobal using para projetos que utilizam os seguintes SDKs:

  • Microsoft.NET.Sdk
  • Microsoft.NET.Sdk.Web
  • Microsoft.NET.Sdk.Worker

Estas diretivas implícitas global using incluem os espaços de nomes mais comuns para o tipo de projeto.

Para obter mais informações, consulte o artigo sobre Diretivas de utilização implícita

Abra Program.cs no seu editor favorito e substitua o código existente pelo seguinte:

List<string> names = ["<name>", "Ana", "Felipe"];
foreach (var name in names)
{
    Console.WriteLine($"Hello {name.ToUpper()}!");
}

Substitua <name> pelo seu nome. Guarde Program.cs. Escreva dotnet run na janela da consola para experimentá-la.

Criou uma lista de cadeias, adicionou três nomes a essa lista e imprimiu os nomes em todas as CAPS. Está a utilizar conceitos que aprendeu em tutoriais anteriores para percorrer a lista.

O código para apresentar nomes utiliza a funcionalidade de interpolação de cadeias . Quando precede um string com o $ caráter, pode incorporar código C# na declaração de cadeia. A cadeia real substitui esse código C# pelo valor que gera. Neste exemplo, substitui o {name.ToUpper()} por cada nome, convertido em letras maiúsculas, porque chamou o ToUpper método.

Vamos continuar a explorar.

Modificar conteúdo da lista

A coleção que criou utiliza o List<T> tipo. Este tipo armazena sequências de elementos. Especifique o tipo de elementos entre os parênteses angulares.

Um aspeto importante deste List<T> tipo é que pode crescer ou encolher, permitindo-lhe adicionar ou remover elementos. Adicione este código no final do programa:

Console.WriteLine();
names.Add("Maria");
names.Add("Bill");
names.Remove("Ana");
foreach (var name in names)
{
    Console.WriteLine($"Hello {name.ToUpper()}!");
}

Adicionou mais dois nomes ao final da lista. Também removeu uma. Guarde o ficheiro e escreva dotnet run para o experimentar.

Permite-lhe List<T> também referenciar itens individuais por índice . Coloca o índice entre [ tokens e ] a seguir ao nome da lista. C# utiliza 0 para o primeiro índice. Adicione este código diretamente abaixo do código que acabou de adicionar e experimente:

Console.WriteLine($"My name is {names[0]}");
Console.WriteLine($"I've added {names[2]} and {names[3]} to the list");

Não pode aceder a um índice para além do fim da lista. Lembre-se de que os índices começam em 0, pelo que o maior índice válido é um menor do que o número de itens na lista. Pode verificar durante quanto tempo a lista está a utilizar a Count propriedade. Adicione o seguinte código no final do programa:

Console.WriteLine($"The list has {names.Count} people in it");

Guarde o ficheiro e dotnet run escreva novamente para ver os resultados.

Procurar e ordenar listas

Os nossos exemplos utilizam listas relativamente pequenas, mas as suas aplicações podem muitas vezes criar listas com muitos mais elementos, por vezes numeração de milhares. Para encontrar elementos nestas coleções maiores, tem de procurar na lista itens diferentes. O IndexOf método procura um item e devolve o índice do item. Se o item não estiver na lista, IndexOf devolve -1. Adicione este código à parte inferior do programa:

var index = names.IndexOf("Felipe");
if (index == -1)
{
    Console.WriteLine($"When an item is not found, IndexOf returns {index}");
}
else
{
    Console.WriteLine($"The name {names[index]} is at index {index}");
}

index = names.IndexOf("Not Found");
if (index == -1)
{
    Console.WriteLine($"When an item is not found, IndexOf returns {index}");
}
else
{
    Console.WriteLine($"The name {names[index]} is at index {index}");

}

Os itens na sua lista também podem ser ordenados. O Sort método ordena todos os itens na lista pela ordem normal (alfabeticamente para cadeias). Adicione este código à parte inferior do programa:

names.Sort();
foreach (var name in names)
{
    Console.WriteLine($"Hello {name.ToUpper()}!");
}

Guarde o ficheiro e escreva dotnet run para experimentar esta versão mais recente.

Antes de iniciar a secção seguinte, vamos mover o código atual para um método separado. Isto torna mais fácil começar a trabalhar com um novo exemplo. Coloque todo o código que escreveu num novo método chamado WorkWithStrings(). Chame esse método na parte superior do seu programa. Quando terminar, o código deverá ter o seguinte aspeto:

WorkWithStrings();

void WorkWithStrings()
{
    List<string> names = ["<name>", "Ana", "Felipe"];
    foreach (var name in names)
    {
        Console.WriteLine($"Hello {name.ToUpper()}!");
    }

    Console.WriteLine();
    names.Add("Maria");
    names.Add("Bill");
    names.Remove("Ana");
    foreach (var name in names)
    {
        Console.WriteLine($"Hello {name.ToUpper()}!");
    }

    Console.WriteLine($"My name is {names[0]}");
    Console.WriteLine($"I've added {names[2]} and {names[3]} to the list");

    Console.WriteLine($"The list has {names.Count} people in it");

    var index = names.IndexOf("Felipe");
    if (index == -1)
    {
        Console.WriteLine($"When an item is not found, IndexOf returns {index}");
    }
    else
    {
        Console.WriteLine($"The name {names[index]} is at index {index}");
    }

    index = names.IndexOf("Not Found");
    if (index == -1)
    {
        Console.WriteLine($"When an item is not found, IndexOf returns {index}");
    }
    else
    {
        Console.WriteLine($"The name {names[index]} is at index {index}");

    }

    names.Sort();
    foreach (var name in names)
    {
        Console.WriteLine($"Hello {name.ToUpper()}!");
    }
}

Listas de outros tipos

Tem utilizado o string tipo de listas até agora. Vamos criar um List<T> tipo diferente. Vamos criar um conjunto de números.

Adicione o seguinte ao seu programa depois de ligar WorkWithStrings()para :

List<int> fibonacciNumbers = [1, 1];

Isto cria uma lista de números inteiros e define os dois primeiros números inteiros para o valor 1. Estes são os dois primeiros valores de uma Sequência Fibonacci, uma sequência de números. Cada número Fibonacci seguinte é encontrado ao obter a soma dos dois números anteriores. Adicione este código:

var previous = fibonacciNumbers[fibonacciNumbers.Count - 1];
var previous2 = fibonacciNumbers[fibonacciNumbers.Count - 2];

fibonacciNumbers.Add(previous + previous2);

foreach (var item in fibonacciNumbers)
{
    Console.WriteLine(item);
}

Guarde o ficheiro e escreva dotnet run para ver os resultados.

Dica

Para se concentrar apenas nesta secção, pode comentar o código que chama WorkWithStrings();. Basta colocar dois / carateres à frente da chamada desta forma: // WorkWithStrings();.

Desafio

Veja se consegue reunir alguns dos conceitos desta e das lições anteriores. Expanda o que criou até agora com Números Fibonacci. Tente escrever o código para gerar os primeiros 20 números na sequência. (Como uma sugestão, o 20º número Fibonacci é 6765.)

Desafio concluído

Pode ver uma solução de exemplo ao analisar o código de exemplo concluído no GitHub.

Com cada iteração do ciclo, está a utilizar os dois últimos números inteiros na lista, somando-os e adicionando esse valor à lista. O ciclo repete-se até adicionar 20 itens à lista.

Parabéns, concluiu o tutorial da lista. Pode continuar com tutoriais adicionais no seu próprio ambiente de desenvolvimento.

Pode saber mais sobre como trabalhar com o List tipo no artigo de noções básicas do .NET sobre coleções. Também irá saber mais sobre muitos outros tipos de coleção.