Saiba como gerenciar coleções de dados usando o tipo de lista genéricoLearn to manage data collections using the generic list type

Este tutorial de introdução fornece uma introdução à linguagem C# e os conceitos básicos da classe List<T>.This introductory tutorial provides an introduction to the C# language and the basics of the List<T> class.

Este tutorial espera que você tenha um computador que possa usar para desenvolvimento.This tutorial expects you to have a machine you can use for development. O tutorial do .NET Olá, mundo em 10 minutos tem instruções para configurar seu ambiente de desenvolvimento local no Windows, Linux ou MacOS.The .NET tutorial Hello World in 10 minutes has instructions for setting up your local development environment on Windows, Linux, or macOS. Uma visão geral de comandos que você usará está em Familiarizar-se com as ferramentas de desenvolvimento, com links para obter mais detalhes.A quick overview of the commands you'll use is in Become familiar with the development tools, with links to more details.

Um exemplo de lista básicaA basic list example

Crie um diretório chamado list-tutorial.Create a directory named list-tutorial. Torne-o o diretório atual e execute dotnet new console.Make that the current directory and run dotnet new console.

Abra Program.cs em seu editor favorito e substitua o código existente pelo seguinte:Open Program.cs in your favorite editor, and replace the existing code with the following:

using System;
using System.Collections.Generic;

namespace list_tutorial
{
    class Program
    {
        static void Main(string[] args)
        {
            var names = new List<string> { "<name>", "Ana", "Felipe" };
            foreach (var name in names)
            {
                Console.WriteLine($"Hello {name.ToUpper()}!");
            }
        }
    }
}

Substitua <name> pelo seu nome.Replace <name> with your name. Salve Program.cs.Save Program.cs. Digite dotnet run na janela de console para testá-lo.Type dotnet run in your console window to try it.

Você criou uma lista de cadeias de caracteres, adicionou três nomes a essa lista e imprimiu os nomes em MAIÚSCULAS.You've just created a list of strings, added three names to that list, and printed out the names in all CAPS. Você está usando conceitos que aprendeu em tutoriais anteriores para executar um loop pela lista.You're using concepts that you've learned in earlier tutorials to loop through the list.

O código para exibir nomes utiliza o recurso de interpolação de cadeia de caracteres.The code to display names makes use of the string interpolation feature. Quando você precede um string com o caractere $, pode inserir o código C# na declaração da cadeia de caracteres.When you precede a string with the $ character, you can embed C# code in the string declaration. A cadeia de caracteres real substitui esse código C# pelo valor gerado.The actual string replaces that C# code with the value it generates. Neste exemplo, ela substitui o {name.ToUpper()} por cada nome, convertido em letras maiúsculas, pois você chamou o método ToUpper.In this example, it replaces the {name.ToUpper()} with each name, converted to capital letters, because you called the ToUpper method.

Vamos continuar explorando.Let's keep exploring.

Modificar conteúdo da listaModify list contents

A coleção que você criou usa o tipo List<T>.The collection you created uses the List<T> type. Esse tipo armazena sequências de elementos.This type stores sequences of elements. Especifique o tipo dos elementos entre os colchetes.You specify the type of the elements between the angle brackets.

Um aspecto importante desse tipo List<T> é que ele pode aumentar ou diminuir, permitindo que você adicione ou remova elementos.One important aspect of this List<T> type is that it can grow or shrink, enabling you to add or remove elements. Adicione este código antes do } de fechamento no método Main:Add this code before the closing } in the Main method:

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

Você adicionou mais dois nomes ao final da lista.You've added two more names to the end of the list. Também removeu um.You've also removed one as well. Salve o arquivo e digite dotnet run para testá-lo.Save the file, and type dotnet run to try it.

O List<T> também permite fazer referência a itens individuais por índice.The List<T> enables you to reference individual items by index as well. Coloque o índice entre os tokens [ e ] após o nome da lista.You place the index between [ and ] tokens following the list name. C# usa 0 para o primeiro índice.C# uses 0 for the first index. Adicione este código diretamente abaixo do código que você acabou de adicionar e teste-o:Add this code directly below the code you just added and try it:

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

Você não pode acessar um índice além do fim da lista.You cannot access an index beyond the end of the list. Lembre-se de que os índices começam com 0, portanto, o maior índice válido é uma unidade a menos do que o número de itens na lista.Remember that indices start at 0, so the largest valid index is one less than the number of items in the list. Você pode verificar há quanto tempo a lista está usando a propriedade Count.You can check how long the list is using the Count property. Adicione o código a seguir ao final do método Main:Add the following code at the end of the Main method:

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

Salve o arquivo e digite dotnet run novamente para ver os resultados.Save the file, and type dotnet run again to see the results.

Pesquisar e classificar listasSearch and sort lists

Nossos exemplos usam listas relativamente pequenas, mas seus aplicativos podem criar listas com muitos outros elementos, chegando, às vezes, a milhares.Our samples use relatively small lists, but your applications may often create lists with many more elements, sometimes numbering in the thousands. Para localizar elementos nessas coleções maiores, pesquise por itens diferentes na lista.To find elements in these larger collections, you need to search the list for different items. O método IndexOf procura um item e retorna o índice do item.The IndexOf method searches for an item and returns the index of the item. Adicione este código à parte inferior de seu método Main:Add this code to the bottom of your Main method:

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 em sua lista também podem ser classificados.The items in your list can be sorted as well. O método Sort classifica todos os itens na lista na ordem normal (em ordem alfabética, no caso de cadeias de caracteres).The Sort method sorts all the items in the list in their normal order (alphabetically in the case of strings). Adicione este código à parte inferior de nosso método Main:Add this code to the bottom of our Main method:

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

Salve o arquivo e digite dotnet run para experimentar a versão mais recente.Save the file and type dotnet run to try this latest version.

Antes de iniciar a próxima seção, vamos passar o código atual para um método separado.Before you start the next section, let's move the current code into a separate method. Isso facilita o começo do trabalho com um exemplo novo.That makes it easier to start working with a new example. Renomeie seu método Main como WorkingWithStrings e escreva um novo método Main que chama WorkingWithStrings.Rename your Main method to WorkingWithStrings and write a new Main method that calls WorkingWithStrings. Quando você terminar, seu código deverá parecer com isto:When you have finished, your code should look like this:

using System;
using System.Collections.Generic;

namespace list_tutorial
{
    class Program
    {
        static void Main(string[] args)
        {
            WorkingWithStrings();
        }

        public static void WorkingWithStrings()
        {
            var names = new List<string> { "<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");
            Console.WriteLine($"The name {names[index]} is at index {index}");

            var notFound = names.IndexOf("Not Found");
            Console.WriteLine($"When an item is not found, IndexOf returns {notFound}");

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

Listas de outros tiposLists of other types

Você usou o tipo string nas listas até o momento.You've been using the string type in lists so far. Vamos fazer List<T> usar um tipo diferente.Let's make a List<T> using a different type. Vamos compilar um conjunto de números.Let's build a set of numbers.

Adicione o seguinte à parte inferior do novo método Main:Add the following to the bottom of your new Main method:

var fibonacciNumbers = new List<int> {1, 1};

Isso cria uma lista de números inteiros e define os primeiros dois inteiros como o valor 1.That creates a list of integers, and sets the first two integers to the value 1. Estes são os dois primeiros valores de uma sequência Fibonacci, uma sequência de números.These are the first two values of a Fibonacci Sequence, a sequence of numbers. Cada número Fibonacci seguinte é encontrado considerando a soma dos dois números anteriores.Each next Fibonacci number is found by taking the sum of the previous two numbers. Adicione este código:Add this code:

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

fibonacciNumbers.Add(previous + previous2);

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

Salve o arquivo e digite dotnet run para ver os resultados.Save the file and type dotnet run to see the results.

Dica

Para se concentrar apenas nesta seção, comente o código que chama WorkingWithStrings();.To concentrate on just this section, you can comment out the code that calls WorkingWithStrings();. Coloque apenas dois caracteres / na frente da chamada, desta forma: // WorkingWithStrings();.Just put two / characters in front of the call like this: // WorkingWithStrings();.

DesafioChallenge

Veja se você consegue combinar alguns dos conceitos desta lição e de lições anteriores.See if you can put together some of the concepts from this and earlier lessons. Expanda o que você compilou até o momento com números Fibonacci.Expand on what you've built so far with Fibonacci Numbers. Tente escrever o código para gerar os 20 primeiros números na sequência.Try to write the code to generate the first 20 numbers in the sequence. (Como uma dica, o vigésimo número Fibonacci é 6765.)(As a hint, the 20th Fibonacci number is 6765.)

Desafio concluídoComplete challenge

Veja um exemplo de solução analisando o código de exemplo finalizado no GitHub.You can see an example solution by looking at the finished sample code on GitHub.

Com cada iteração do loop, você está pegando os últimos dois inteiros na lista, somando-os e adicionando esse valor à lista.With each iteration of the loop, you're taking the last two integers in the list, summing them, and adding that value to the list. O loop será repetido até que você tenha adicionado 20 itens à lista.The loop repeats until you've added 20 items to the list.

Parabéns, você concluiu o tutorial de lista.Congratulations, you've completed the list tutorial. Continue com o tutorial Introdução às classes em seu próprio ambiente de desenvolvimento.You can continue with the Introduction to classes tutorial in your own development environment.

Saiba mais sobre como trabalhar com o tipo List no tópico Guia de .NET em coleções.You can learn more about working with the List type in the .NET Guide topic on collections. Você também aprenderá muitos outros tipos de coleção.You'll also learn about many other collection types.