Da trilha de C# Este conceito ainda não saiu como card do dia. ir para o card de hoje

C# Coleções Intermediário

Dictionary e HashSet

As coleções genéricas Dictionary<TKey,TValue> e HashSet<T> são fundamentais para armazenar dados de forma eficiente quando precisamos de acesso rápido por chave ou garantir unicidade de elementos. O Dictionary mapeia chaves únicas a valores, permitindo buscas, inserções e remoções em tempo constante médio. Já o HashSet armazena apenas elementos únicos, sem ordem definida, e é ideal para operações de conjunto como união, interseção e diferença.

Neste card, você vai aprender a usar Dictionary com a técnica TryGetValue para evitar exceções e melhorar a performance, a criar HashSet para eliminar duplicatas e a escolher a coleção certa para cada situação. Entender quando usar cada uma é essencial para escrever código limpo e eficiente.

Pontos-chave

  • Dictionary<TKey,TValue> associa chaves únicas a valores e oferece acesso O(1) médio.
  • TryGetValue evita exceções e faz uma única busca, sendo mais eficiente que ContainsKey seguido de indexação.
  • HashSet<T> armazena elementos únicos e é otimizado para operações de conjunto e testes de pertinência.
  • Use Dictionary quando precisar associar chaves a valores; use HashSet quando precisar apenas garantir unicidade ou comparar conjuntos.
  • Ambos dependem de GetHashCode e Equals; para tipos personalizados, sobrescreva esses métodos corretamente.
ColecoesDemo.cs
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // Dictionary: mapeia nomes a idades
        var idades = new Dictionary<string, int>
        {
            ["Ana"] = 28,
            ["Bruno"] = 34,
            ["Carla"] = 22
        };

        // TryGetValue: busca segura e eficiente
        if (idades.TryGetValue("Bruno", out int idade))
            Console.WriteLine($"Idade do Bruno: {idade}");
        else
            Console.WriteLine("Bruno não encontrado");

        // HashSet: remove duplicatas
        var numeros = new HashSet<int> { 1, 2, 2, 3, 4, 4, 5 };
        Console.WriteLine($"Itens únicos: {string.Join(", ", numeros)}");

        // Operações de conjunto com HashSet
        var pares = new HashSet<int> { 2, 4, 6, 8 };
        var impares = new HashSet<int> { 1, 3, 5, 7 };
        pares.UnionWith(impares); // união
        Console.WriteLine($"União: {string.Join(", ", pares)}");

        // Escolha da coleção: Dictionary para contagem
        var contagem = new Dictionary<char, int>();
        foreach (char c in "banana")
        {
            contagem.TryGetValue(c, out int n);
            contagem[c] = n + 1;
        }
        Console.WriteLine($"Contagem de 'a': {contagem['a']}");
    }
}

Exercícios

  1. 1
    Fácil

    Contando ocorrências com Dictionary

    Escreva um programa que leia uma frase e conte quantas vezes cada palavra aparece. Use um Dictionary<string, int> e TryGetValue para atualizar a contagem.

    Resolver
  2. 2
    Médio

    Removendo duplicatas com HashSet

    Dada uma lista de números inteiros com duplicatas, use um HashSet<int> para criar uma nova lista sem repetições, mantendo a ordem original de primeira ocorrência. Imprima a lista resultante.

    Resolver
  3. 3
    Desafio

    Interseção de conjuntos com Dictionary e HashSet

    Dados dois arrays de strings, encontre os elementos comuns a ambos. Use um HashSet<string> para o primeiro array e um Dictionary<string, int> para contar quantas vezes cada elemento aparece no segundo array. Imprima os elementos comuns e suas contagens no segundo array, ordenados alfabeticamente.

    Resolver

Continue estudando