Alura > Cursos de Programação > Cursos de .NET > Conteúdos de .NET > Primeiras aulas do curso C#: Trabalhando com Arrays e Coleções

C#: Trabalhando com Arrays e Coleções

Array - Apresentação

Olá, tudo bom? Meu nome é André Bessa, sou um homem negro com barba por fazer, cabelo baixo e rosto arredondado. Serei seu instrutor ao longo deste treinamento de C# que abordará arrays e coleções de objetos.

Este curso é voltado para pessoas que estão se aprofundando na linguagem C# e querem dar um passo a mais na evolução de seu aprendizado. Trabalharemos em um projeto do ByteBank, fazendo implementações na área de atendimento ao cliente, a pedido do gerente de contas do banco.

Definiremos uma classe chamada ByteBankAtendimento que implementa uma lista de objetos. Nesse sistema, teremos uma série de opções para cadastrar, listar, remover, ordenar e pesquisar as contas dessa instituição.

Ao executar o projeto final, teremos uma aplicação console com todas essas funcionalidades. Por exemplo, pressionando 1 e informando os dados necessários (número da agência, saldo inicial, nome do titular, CPF do titular e profissão), conseguiremos cadastrar uma nova conta. Pressionando 2, listaremos todas as contas, e assim por diante.

Desse modo, entenderemos o que são arrays: a sua sintaxe, como criá-los e quais são as classes disponíveis no .NET para criar arrays de objetos (como as classes ArrayList e List<T>).

Usando esses conceitos de orientação a objetos na linguagem C#, o resultado deste curso será um programa para manipular um array ou uma coleção de objetos, que simulará nossa fonte de dados do sistema.

Para tirar melhor proveito do conteúdo, recomendamos fortemente que você já tenha estudado conceitos básicos da linguagem C#, como a criação de variáveis e a estrutura de decisão e repetição, além de conceitos de orientação a objetos, como classes, objetos e interfaces.

Ficou animado? Vamos estudar!

Array - Primeiro Array

Ao longo deste curso, usaremos o Visual Studio Community 2022 para desenvolver nosso projeto de atendimento ao cliente do ByteBank, a pedido do gerente de contas do banco.

Com o projeto inicial aberto no Visual Studio, na barra superior podemos acessar "Exibir > Gerenciador de Soluções" para abrir o gerenciador à direita da tela e observarmos a estrutura de pastas e arquivos.

Vamos inserir alguns códigos no arquivo Program.cs para compreender alguns conceitos iniciais. Começaremos nossos estudos falando sobre arrays.

Imagine, por exemplo, que precisamos encontrar a média entre 5 idades:

Console.WriteLine("Boas Vindas ao ByteBank, Atendimento.");

int idade = 30;
int idade = 40;
int idade = 17;
int idade = 21;
int idade = 18;

De início, já obtemos um erro, pois em um mesmo contexto estamos tentando usar o mesmo nome para variáveis diferentes. Então, vamos renomeá-las para distingui-las:

Console.WriteLine("Boas Vindas ao ByteBank, Atendimento.");

int idade0 = 30;
int idade1 = 40;
int idade2 = 17;
int idade3 = 21;
int idade4 = 18;

Esse padrão não fica muito bom, mas funciona. Para encontrar a média entre essas idades, vamos somar o valor das variáveis e dividir o resultado por 5:

Console.WriteLine("Boas Vindas ao ByteBank, Atendimento.");

int idade0 = 30;
int idade1 = 40;
int idade2 = 17;
int idade3 = 21;
int idade4 = 18;

int media = (idade0+ idade1+ idade2+ idade3+ idade4) / 5;

Dessa forma, obtemos a média, porém o processo foi trabalhoso. No momento, temos apenas 5 idades para fazer a média, mas e se tivéssemos 10, ou 20, ou 30, ou até 100 idades? Seria muito complexo para fazer manualmente! Para evitar esse problema, seria interessante termos apenas uma variável para armazenar todos os valores — e este é exatamente o conceito de array.

Um array é uma variável especial em que podemos colocar mais de um valor do mesmo tipo. Vamos remover a variável media, criar um array chamado idades e, na sequência, analisar sua sintaxe:

Console.WriteLine("Boas Vindas ao ByteBank, Atendimento.");

int idade0 = 30;
int idade1 = 40;
int idade2 = 17;
int idade3 = 21;
int idade4 = 18;

int[] idades = new int[5];

Com int[], indicamos que nossa variável é um array de valores do tipo int. Em seguida, usamos new int[5] para criar uma instância na memória do computador e determinar o tamanho do array, no caso, 5. Essa é uma das sintaxes que podemos usar para criar um array com C#.

Agora, precisamos inserir valores na variável idades. No .NET, trabalhamos com arrays usando índices, informando-os por meio dos colchetes:

// código anterior omitido

int[] idades = new int[5];

idades[0] = 30;
idades[1] = 40;
idades[2] = 17;
idades[3] = 21;
idades[4] = 18;

É importante ressaltar que os vetores no C# começam com o índice 0, ou seja, a primeira posição do array corresponde ao índice 0. Assim, no índice 0 (posição 1), temos o valor 30. No índice 1 (posição 2), temos o valor 40, e assim por diante.

Agora que criamos uma única variável idades capaz de armazenar 5 valores inteiros, podemos apagar as variáveis idade0 a idade4 no começo do nosso código:

Console.WriteLine("Boas Vindas ao ByteBank, Atendimento.");

int[] idades = new int[5];
idades[0] = 30;
idades[1] = 40;
idades[2] = 17;
idades[3] = 21;
idades[4] = 18;

Sendo assim, já entendemos o básico sobre arrays. Em seguida, para aprofundar nossos estudos, vamos criar um método para percorrer esse array e exibir algumas informações para nós. Por exemplo, podemos retornar o valor de cada posição do array ou fazer a média dos valores nele contido.

A princípio, vamos criar um método chamado TestaArrayInt() e mover nossa estrutura de array para dentro dele:

Console.WriteLine("Boas Vindas ao ByteBank, Atendimento.");



void TestaArrayInt()
{
    int[] idades = new int[5];
    idades[0] = 30;
    idades[1] = 40;
    idades[2] = 17;
    idades[3] = 21;
    idades[4] = 18;
}

Em seguida, vamos exibir uma mensagem com o tamanho do array. Usaremos a interpolação de strings e a propriedade .Length de idades, que mostrará o tamanho:

Console.WriteLine("Boas Vindas ao ByteBank, Atendimento.");



void TestaArrayInt()
{
    int[] idades = new int[5];
    idades[0] = 30;
    idades[1] = 40;
    idades[2] = 17;
    idades[3] = 21;
    idades[4] = 18;

    Console.WriteLine($"Tamanho do Array {idades.Length}");
}

Na sequência, vamos exibir no console cada posição do array. Ou seja, precisamos encontrar uma maneira de passar pelas posições 1, 2, 3, 4 e 5. Para tanto, utilizaremos uma estrutura de iteração, um laço de repetição for. Basta digitar for e pressionar a tecla "Tab" duas vezes para gerar um modelo automaticamente:

Console.WriteLine("Boas Vindas ao ByteBank, Atendimento.");



void TestaArrayInt()
{
    int[] idades = new int[5];
    idades[0] = 30;
    idades[1] = 40;
    idades[2] = 17;
    idades[3] = 21;
    idades[4] = 18;

    Console.WriteLine($"Tamanho do Array {idades.Length}");

    for (int i = 0; i < idades.Length; i++)
    {

    }
}

Começamos no índice 0 (int i = 0). A cada iteração, i será incrementado (i++) e continuaremos repetindo essa estrutura enquanto i for menor que o tamanho de idades.

Dentro do for, criaremos uma variável idade que receberá um valor do array idades em um índice específico:

Console.WriteLine("Boas Vindas ao ByteBank, Atendimento.");



void TestaArrayInt()
{
    int[] idades = new int[5];
    idades[0] = 30;
    idades[1] = 40;
    idades[2] = 17;
    idades[3] = 21;
    idades[4] = 18;

    Console.WriteLine($"Tamanho do Array {idades.Length}");

    for (int i = 0; i < idades.Length; i++)
    {
        int idade = idades[i];
    }
}

Na primeira iteração, i será igual a 0, portanto a variável idade assumirá o valor de idades[0], que corresponde a 30. Na segunda iteração, i será igual a 1, logo idade corresponderá a 40, e assim por diante.

Depois, vamos exibir no console o índice e a idade correspondente:

Console.WriteLine("Boas Vindas ao ByteBank, Atendimento.");



void TestaArrayInt()
{
    int[] idades = new int[5];
    idades[0] = 30;
    idades[1] = 40;
    idades[2] = 17;
    idades[3] = 21;
    idades[4] = 18;

    Console.WriteLine($"Tamanho do Array {idades.Length}");

    for (int i = 0; i < idades.Length; i++)
    {
        int idade = idades[i];
        Console.WriteLine($"índice [{i}] = {idade}");
    }
}

Por fim, vamos chamar o método na linha 3 do nosso código:

Console.WriteLine("Boas Vindas ao ByteBank, Atendimento.");

TestaArrayInt();

void TestaArrayInt()
{
    int[] idades = new int[5];
    idades[0] = 30;
    idades[1] = 40;
    idades[2] = 17;
    idades[3] = 21;
    idades[4] = 18;

    Console.WriteLine($"Tamanho do Array {idades.Length}");

    for (int i = 0; i < idades.Length; i++)
    {
        int idade = idades[i];
        Console.WriteLine($"índice [{i}] = {idade}");
    }
}

Podemos salvar as alterações e executar nosso programa pressionando o play na parte superior do Visual Studio. O projeto será compilado, o console será renderizado e, como resultado, veremos "Tamanho do Array 5" e o valor de cada posição do vetor. Está tudo funcionando como o planejado.

A seguir, vamos calcular a média. Como vimos anteriormente, precisamos somar todos os valores e dividir o resultado por 5. Então, criaremos uma variável chamada acumulador para somar cada idade à medida que percorremos o vetor. Ou seja, ao final, acumulador será a soma total das idades e basta o dividirmos por 5:

Console.WriteLine("Boas Vindas ao ByteBank, Atendimento.");

TestaArrayInt();

void TestaArrayInt()
{
    int[] idades = new int[5];
    idades[0] = 30;
    idades[1] = 40;
    idades[2] = 17;
    idades[3] = 21;
    idades[4] = 18;

    Console.WriteLine($"Tamanho do Array {idades.Length}");

    int acumulador = 0;
    for (int i = 0; i < idades.Length; i++)
    {
        int idade = idades[i];
        Console.WriteLine($"índice [{i}] = {idade}");
        acumulador+=idade;
    }
}

Assim, criamos o acumulador antes do for e o inicializamos com o valor 0. Já dentro do lado de repetição, a cada iteração, somaremos idade ao acumulador. Uma vez finalizado o loop, vamos usar a soma das idades para calcular a média e exibi-la no console:

Console.WriteLine("Boas Vindas ao ByteBank, Atendimento.");

TestaArrayInt();

void TestaArrayInt()
{
    int[] idades = new int[5];
    idades[0] = 30;
    idades[1] = 40;
    idades[2] = 17;
    idades[3] = 21;
    idades[4] = 18;

    Console.WriteLine($"Tamanho do Array {idades.Length}");

    int acumulador = 0;
    for (int i = 0; i < idades.Length; i++)
    {
        int idade = idades[i];
        Console.WriteLine($"índice [{i}] = {idade}");
        acumulador+=idade;
    }
}

    int media = acumulador / idades.Length;
    Console.WriteLine($"Média de idades = {media}");

Perceba que, em vez de dividir diretamente por 5, usamos idades.Length. Dessa forma, podemos usar esse mesmo método para outros arrays com outros tamanhos, sem precisar mudar o denominador utilizado em media.

Vamos salvar as alterações e executar o projeto. Dessa vez, veremos ao final "Média de idade = 25".

Neste vídeo, começamos a estudar os arrays, que são um tipo especial de variável em que conseguimos armazenar mais de um valor do mesmo tipo. Para trabalhar com arrays, usamos os índices tanto para atribuir quanto para retornar valores de posições específicas do vetor.

Na sequência, exploraremos outras possibilidades de como percorrer um array.

Array - Percorrendo um Array

Já vimos como criar um array e como percorrê-lo com o laço de repetição for. Neste vídeo, faremos mais testes com vetores, dessa vez com um array de strings.

Abaixo de TestaArrayInt, vamos criar um método TestaBuscarPalavra() que solicitará ao usuário que digite 5 palavras e, depois, que escolha uma delas para buscar no array. Ou seja, é como se cadastrássemos as strings em um banco de dados e, mais tarde, fizéssemos uma consulta nessa base.

Em TestaBuscarPalavras(), começaremos declarando o vetor arrayDePalavras:

// código anterior omitido

void TestaBuscarPalavra()
{
    string[] arrayDePalavras = new string[5];
}

Em seguida, com o laço for, criaremos uma estrutura que solicitará ao usuário que informe uma palavra para cada posição do array. Lembre-se que podemos digitar for e pressionar a tecla "Tab" duas vezes para gerar um modelo.

Dentro do laço de iteração, não usaremos o Console.WriteLine(). Vamos optar pelo Console.Write(), pois não queremos pular uma linha. Em seguida, faremos com que o array receba o valor digitado pelo usuário por meio do Console.ReadLine():

// código anterior omitido

void TestaBuscarPalavra()
{
    string[] arrayDePalavras = new string[5];

    for (int i = 0; i < arrayDePalavras.Length; i++)
    {
        Console.Write($"Digite {i + 1}ª Palavra: ");
        arrayDePalavras[i]=Console.ReadLine();
    }
}

Note que usamos {i + 1}, porque o índice 0 corresponderá à primeira palavra. Ou seja, quando i for igual a 0, o programa solicitará "Digite 1ª Palavra".

Além disso, é importante lembrar que nosso array recebe apenas strings e o Console.ReadLine() é um método que retorna uma string, por isso nosso código continua funcionando.

Após obter as 5 palavras, a aplicação pedirá ao usuário que especifique a string que deseja encontrar. Vamos armazenar o valor digitado numa variável chamada busca:

// código anterior omitido

void TestaBuscarPalavra()
{
    string[] arrayDePalavras = new string[5];

    for (int i = 0; i < arrayDePalavras.Length; i++)
    {
        Console.Write($"Digite {i + 1}ª Palavra: ");
        arrayDePalavras[i]=Console.ReadLine();
    }
}

    Console.Write("Digite palavra a ser encontrada: ");
    var busca = Console.ReadLine();

Note que definimos busca como um var — em tempo de execução, o compilador .NET interpretará que o termo antes da igualdade retornará uma string, então definirá o busca como tipo string.

Recapitulando o que fizemos até agora: vamos percorrer um vetor utilizando o for e recorrendo aos índices para inserir 5 valores informados pelo usuário. Depois, vamos pedir que digite a palavra que deseja encontrar e armazenaremos essa informação na variável busca.

Agora, precisamos percorrer o array novamente, comparando cada posição do vetor com o valor de busca, para verificar se encontramos a palavra desejada ou não. Dessa vez, usaremos a estrutura foreach — em inglês, "for each" significa "para cada".

Assim como o for, podemos digitar foreach e pressionar a tecla "Tab" duas vezes para gerar um modelo automaticamente.

A estrutura foreach é mais simples em relação ao for e nos permite percorrer um array ou uma coleção (que estudaremos mais adiante neste curso). Ela é interessante principalmente quando não precisamos especificar os índices:

// código anterior omitido

    foreach (string palavra in arrayDePalavras)
    {

    }

Então, para cada palavra no arrayDePalavras, rodaremos o bloco de código contido no foreach:

// código anterior omitido

    foreach (string palavra in arrayDePalavras)
    {
        if (palavra.Equals(busca))
        {
            Console.WriteLine($"Palavra encontrada = {busca}.");
        }
        else
        {
            Console.WriteLine($"Palavra não encontrada.");
        }
    }

O método .Equals() nos permite verificar se uma string é igual a outra. Assim, se palavra for igual a busca, vamos exibir no console a frase "Palavra encontrada" seguida da palavra. Do contrário, exibiremos "Palavra não encontrada".

Em outras palavras, o foreach é outra estrutura de repetição para iterar um array.

É hora de testar. Vamos comentar a chamada de TestaArrayInt() na linha 3 e criar uma chamada de TestaBuscaPalavra() na linha 4:

Console.WriteLine("Boas Vindas ao ByteBank, Atendimento.");

//TestaArrayInt();
TestaBuscarPalavra();

// código posterior omitido

Em seguida, vamos salvar e executar o projeto. O programa pedirá para digitarmos 5 palavras, vamos informar: "Andre", "Jose", "Pedro", "Maria" e "Ulisses". Depois, será solicitada a palavra para ser encontrada, digitaremos "Jose". O retorno será o seguinte:

Palavra não encontrada.
Palavra encontrada = Jose.
Palavra não encontrada.
Palavra não encontrada.
Palavra não encontrada.

Não obtivemos o resultado esperado. Para cada iteração, o programa está imprimindo um aviso. O nosso objetivo era que a aplicação apenas retornasse uma mensagem caso a palavra digitada fosse encontrada. Vamos voltar à nossa estrutura foreach e corrigi-la.

Primeiramente, vamos remover o bloco else, pois não esperamos nenhum comportamento do programa se a palavra não for encontrada. Além disso, vamos inserir um break após o Console.WriteLine():

// código anterior omitido

    foreach (string palavra in arrayDePalavras)
    {
        if (palavra.Equals(busca))
        {
            Console.WriteLine($"Palavra encontrada = {busca}.");
            break;
        }
    }

Assim, uma vez que a palavra deseja for encontrada, o break interromperá o laço de repetição. Outra opção seria usar um return.

Vamos salvar e rodar o projeto novamente. Informaremos as mesmas 5 palavras e buscaremos por "Jose" mais uma vez. Dessa vez, nosso programa funcionará como o esperado!

Portanto, neste vídeo, criamos um método que trabalha com um array de strings. Digitamos 5 palavras e o programa fará a busca por um termo específico, analisando cada índice do vetor. Em vez do laço for, optamos pela estrutura foreach, que nos permite iterar por arrays e coleções (que veremos mais adiante neste curso).

Na sequência, descobriremos mais formas de trabalhar com arrays no .NET.

Sobre o curso C#: Trabalhando com Arrays e Coleções

O curso C#: Trabalhando com Arrays e Coleções possui 197 minutos de vídeos, em um total de 60 atividades. Gostou? Conheça nossos outros cursos de .NET em Programação, ou leia nossos artigos de Programação.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda .NET acessando integralmente esse e outros cursos, comece hoje!

Plus

De
R$ 1.800
12X
R$109
à vista R$1.308
  • Acesso a TODOS os cursos da Alura

    Mais de 1500 cursos completamente atualizados, com novos lançamentos todas as semanas, emProgramação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

Matricule-se

Pro

De
R$ 2.400
12X
R$149
à vista R$1.788
  • Acesso a TODOS os cursos da Alura

    Mais de 1500 cursos completamente atualizados, com novos lançamentos todas as semanas, emProgramação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

  • Luri, a inteligência artificial da Alura

    Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com Luri até 100 mensagens por semana.

  • Alura Língua (incluindo curso Inglês para Devs)

    Estude a língua inglesa com um curso 100% focado em tecnologia e expanda seus horizontes profissionais.

Matricule-se
Conheça os Planos para Empresas

Acesso completo
durante 1 ano

Estude 24h/dia
onde e quando quiser

Novos cursos
todas as semanas