IRONSOFTWAREHOME

Entendendo as listas em C#

Understanding C# List

Layla Porter

14m 6s

A classe List em C# é um tipo de coleção versátil. É baseado em um array dinâmico como estrutura de dados interna, permitindo a manipulação eficiente de elementos. Ao criar uma lista, você pode especificar uma capacidade inicial padrão para otimizar o uso da memória desde o início. Essa capacidade representa o número de elementos que a lista pode conter inicialmente sem realocar memória.

No vídeo de Layla Porter, " C# para Iniciantes Parte 7 - Consultando Dados com LINQ ", ela explora em detalhes a funcionalidade das listas em C#, demonstrando como aproveitar o LINQ (Language Integrated Query) para consultar dados de forma eficiente. Este artigo detalha os principais conceitos e exemplos do vídeo de Layla, oferecendo uma compreensão abrangente de listas em C# para iniciantes.

Introdução às Listas em C#

Como Layla menciona no início do vídeo (0:03), uma lista em C# é uma estrutura de dados versátil que permite aos desenvolvedores armazenar e manipular uma coleção de elementos. Ao contrário dos arrays, as listas podem ser redimensionadas dinamicamente, tornando-as ideais para cenários em que o número de elementos não é conhecido antecipadamente.

Usar uma lista é simples. Você pode adicionar elementos a ela usando o método Add, que anexa o objeto especificado ao final da lista. A lista usa um índice baseado em zero, o que significa que o primeiro elemento é acessado no índice 0. Você também pode acessar elementos por um índice especificado usando a notação de colchetes ([]).

Para percorrer a lista, você pode usar um loop foreach, que itera sobre cada elemento na ordem em que eles aparecem. Se você precisar encontrar a primeira ocorrência de um elemento específico, pode usar métodos como IndexOf com um predicado, que realiza a busca com base em uma condição especificada.

A lista é fortemente tipada, o que significa que ela contém objetos de um tipo específico (T). Isso garante a segurança de tipos e permite o uso de métodos e propriedades definidos pelo tipo de objeto especificado. Por padrão, a classe List utiliza uma função hash padrão para organizar os elementos de forma eficiente.

Vamos analisar detalhadamente o funcionamento das classes List e List, conforme demonstrado por Layla em seu vídeo.

Criando uma lista

Ao criar uma lista em C#, você pode definir uma capacidade inicial específica para otimizar a estrutura de dados interna. As listas são versáteis e podem ser inicializadas a partir de uma coleção específica de elementos. Você pode acessar itens usando um índice inteiro e iterar sobre eles usando um loop foreach. Ao contrário dos dicionários, as listas não dependem de uma função hash padrão e armazenam objetos fortemente tipados, garantindo segurança de tipos e consistência no gerenciamento de seus dados.

Em (0:44), Layla cria uma lista de queijos, ilustrando como inicializar e preencher uma lista. Em C#, uma lista pode ser criada usando a classe List, onde T representa o tipo de elementos contidos na lista.

List<Cheese> cheeseList = new List<Cheese>
{
    new Cheese(1, "Stilton", 3.0m, 5),
    new Cheese(2, "Cheddar", 2.25m, 3),
    new Cheese(3, "Pineapple", 3.5m, 1),
    new Cheese(4, "Brie", 5.5m, 2),
    new Cheese(5, "Roquefort", 3.5m, 5),
};

No exemplo acima, Layla cria um List<Cheese> usando a sintaxe do inicializador de coleção para definir e popular a lista com objetos Cheese. Ela especifica propriedades como ID, nome, preço e intensidade para cada objeto de queijo correspondente à classe Cheese, demonstrando a criação e inicialização de uma lista em C#.

Iterando pela lista de queijos para imprimir o ID e o nome.

Layla Porter demonstra como usar um loop foreach para iterar sobre o cheeseList e imprimir apenas o ID e Nome de cada queijo. Segue abaixo o código juntamente com uma explicação:

foreach (var cheese in cheeseList)
{
    Console.WriteLine($"ID: {cheese.ID}, Name: {cheese.Name}");
}

No código acima, Layla usa um loop foreach para percorrer o cheeseList. Isto imprime todos os elementos da lista. O loop itera através de cada objeto Cheese na lista. Em cada iteração, a variável cheese contém o objeto Cheese atual no índice especificado. Usando Console.WriteLine, ela imprime as propriedades ID e Nome de cada elemento de queijo, mostrando como acessar e exibir elementos específicos de uma lista em C#.

Pesquisando queijo usando consulta LINQ

No vídeo, aos 2:45, Layla Porter demonstra como pesquisar um queijo específico com base na entrada do usuário usando LINQ. Ela usa o método ReadLine para obter o nome do queijo do usuário:

string cheeseName = Console.ReadLine();

Ao pesquisar um item na lista, Layla destaca um ponto-chave muito importante aos 2:51. Ela diz que, se não usássemos LINQ, teríamos que percorrer manualmente cada queijo em nossa coleção para encontrar um nome que correspondesse à entrada do usuário, mas as bibliotecas auxiliares do LINQ cuidam disso nos bastidores, tornando o processo muito eficiente. O seguinte trecho de código demonstra como Layla (3:40) itera através dos elementos da lista sem usar um loop for apenas usando a sintaxe de consulta LINQ:

if (cheeseList.Any(cheese => cheese.Name == cheeseName))
{
    Cheese cheese = cheeseList.FirstOrDefault(c => c.Name == cheeseName);

    Console.WriteLine($"{cheese.Name} cheese costs £{cheese.Price.ToString()} and has a strength of {cheese.Strength}.");
}
else
{
    Console.WriteLine("I'm sorry, we don't have that cheese.");
}

No código acima:

  • Layla explica que, em vez de percorrer a lista manualmente, podemos usar o LINQ para uma pesquisa mais eficiente. O método Any verifica se algum queijo na lista corresponde ao nome inserido pelo usuário.

  • Se uma correspondência for encontrada, isso significa que o elemento existe, o método FirstOrDefault recupera o primeiro queijo que corresponde ao nome de entrada. Este método é seguro, pois retorna nulo se nenhuma correspondência for encontrada, evitando possíveis erros.

  • Se o queijo for encontrado, seu nome, preço e teor alcoólico serão impressos. Caso contrário, será exibida uma mensagem indicando que o queijo não foi encontrado.

Essa abordagem demonstra a eficiência e a simplicidade do uso do LINQ para pesquisar coleções em C#. A saída do trecho de código é mostrada às 7:19: (Imagem melhor possível que abaixo?)

Exemplo de Saída

Como lidar com a diferenciação entre maiúsculas e minúsculas durante a pesquisa

Ao trabalhar com strings, Layla às 8:00, lembra que é importante lembrar que elas são sensíveis a maiúsculas e minúsculas. Para garantir que nossas comparações de nomes de queijos não sejam sensíveis a maiúsculas e minúsculas, precisamos converter tanto a entrada do usuário quanto os nomes dos queijos em nossa lista para minúsculas usando o método .ToLower(). Isso permite que o usuário insira qualquer tipo de letra maiúscula e minúscula, e nosso código ainda encontrará corretamente o queijo correspondente. Basta lembrar que a diferenciação entre maiúsculas e minúsculas em strings pode ser problemática, portanto, lidar com ela corretamente é crucial.

Exemplo prático: Consultando queijos por intensidade

Em (8:50), Layla cria um exemplo prático onde o usuário pode filtrar queijos por sua intensidade, demonstrando como combinar a entrada do usuário com consultas LINQ.

1. Solicitação e leitura de entrada do usuário

Console.WriteLine("What strength cheese are you interested in - choose between 1 and 5");
string strengthString = Console.ReadLine();

Layla às 9:05, começa pedindo ao usuário para escolher um valor de força entre 1 e 5. Isso é feito com um simples Console.WriteLine pedindo entrada, seguido por Console.ReadLine() para pegar o que eles digitam.

2. Converter entrada em número inteiro

bool isInt = int.TryParse(strengthString, out int strength);

Em seguida, às 9h16, ela se certifica de que a entrada deles seja um número real. Ela recomenda usar int.TryParse para isso. Se a entrada for válida e convertida com sucesso para um número inteiro, ótimo! Caso contrário, bem, podemos lidar com isso de forma elegante.

3. Classificando os queijos por intensidade

List<Cheese> cheeseByStrength = cheeseList.Where(c => c.Strength == strength).ToList();

Agora vem a parte divertida no vídeo de Layla às 10:25. Aqui, ela mostra como filtrar nossa lista de queijos ou seja, cheeseList usando LINQ. Com o método Where do LINQ e uma rápida expressão lambda (c => c.Strength == strength), ela extrai apenas os queijos que correspondem à força selecionada pelo usuário. Isso nos dá uma nova lista, cheeseByStrength.

4. Queijos Filtrados de Saída

foreach (var cheese in cheeseByStrength)
{
    Console.WriteLine($"Name: {cheese.Name} cheese");
}

Por fim, às 12:03, para encerrar bem, Layla percorre cheeseByStrength com um loop foreach. Para cada queijo naquela lista, ela imprime seu nome usando o predicado especificado em Console.WriteLine. Simples e eficaz!

Ao executar o programa às 12h17, Layla demonstra como o usuário insere um valor de intensidade e a lista é filtrada para exibir apenas os queijos com a intensidade especificada. A saída de exemplo é mostrada abaixo: (Imagem melhor possível?)

Exemplo de saída

Conclusão

O vídeo de Layla apresenta de forma eficaz o conceito de listas em C# e como consultá-las usando LINQ. Seguindo seus exemplos e explicações, os iniciantes podem obter uma base sólida para trabalhar com listas e consultar dados em C#. Para mais detalhes e sessões de programação ao vivo, confira o canal do YouTube da Layla e participe de suas transmissões ao vivo.

Lembre-se de explorar os vários métodos e propriedades da classe List, como a propriedade Count, método Insert, funções de predicado, e mais, para aprimorar seu entendimento e habilidade em manipular listas de forma eficaz.

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.

Your trial license will be sent to your email address

Sem limitações. 100% desbloqueado. Sem cartão de crédito.

OR
bullet_checkedNão é necessário cartão de crédito nem criação de conta.Sem limitações. 100% desbloqueado. Sem cartão de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
Agende sua consulta sem compromisso.
Preencha o formulário abaixo ou envie um e-mail para sales@ironsoftware.com
Os seus dados serão sempre mantidos em sigilo.
Aprovado por milhões de engenheiros em todo o mundo.
Logotipos dos clientes da Iron Software
Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.
Não é necessário cartão de crédito nem criação de conta.