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.TryGetValueevita exceções e faz uma única busca, sendo mais eficiente queContainsKeyseguido de indexação.HashSet<T>armazena elementos únicos e é otimizado para operações de conjunto e testes de pertinência.- Use
Dictionaryquando precisar associar chaves a valores; useHashSetquando precisar apenas garantir unicidade ou comparar conjuntos. - Ambos dependem de
GetHashCodeeEquals; para tipos personalizados, sobrescreva esses métodos corretamente.
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']}");
}
}