Ir para o conteúdo do rodapé
Iron Academy Logo
Aprenda C#
Aprenda C#

Outras categorias

Entendendo as listas em C#

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),
};
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 o 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}");
}
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. Isso imprime todos os elementos da lista. O loop itera por cada objeto Cheese na lista. Em cada iteração, a variável cheese manté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();
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 trecho de código a seguir demonstra como Layla (3:40) itera pelos 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.");
}
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, 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#. O resultado do trecho de código é mostrado em 7:19: (Uma imagem melhor seria possível?)

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 diferenciam maiúsculas de minúsculas. Para garantir que as comparações de nomes de queijo sejam insensíveis a maiúsculas, precisamos converter tanto a entrada do usuário quanto os nomes de queijo na 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();
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 de Console.ReadLine() para capturar o que eles digitam.

2. Converter entrada em número inteiro

bool isInt = int.TryParse(strengthString, out int strength);
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();
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, i.e., 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 que o usuário escolheu. Isso nos dá uma nova lista, cheeseByStrength.

4. Queijos Filtrados de Saída

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

Por último, às 12:03, para encerrar tudo bem, Layla percorre cheeseByStrength com um loop foreach. Para cada queijo nessa lista, ela imprime seu nome usando um 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: (Uma imagem melhor seria 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, o método Insert, funções predicadas e mais, para aprimorar sua compreensão e capacidade de manipular listas de forma eficaz.

Hero Worlddot related to Entendendo as listas em C#
Hero Affiliate related to Entendendo as listas em C#

Ganhe mais compartilhando o que você ama.

Você cria conteúdo para desenvolvedores que trabalham com .NET, C#, Java, Python ou Node.js? Transforme sua expertise em renda extra!

Equipe de suporte de ferro

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim