C# Programming

Dominando los Mapas Hash en C# con Dictionary

Spread the love

C# no ofrece una clase llamada directamente «HashMap», a diferencia de Java. Sin embargo, su clase Dictionary<TKey, TValue> proporciona una funcionalidad equivalente y es el enfoque recomendado para las operaciones de mapa hash.

Tabla de contenido

Usando Dictionary<TKey, TValue> como un mapa hash

Dictionary<TKey, TValue> ofrece un almacén de clave-valor con una complejidad de tiempo promedio de O(1) para operaciones comunes como inserción, eliminación y recuperación. TKey especifica el tipo de clave, y TValue define el tipo de valor asociado. Exploremos su uso:

Creando y poblando un diccionario:


// Crea un diccionario para almacenar cadenas como claves y enteros como valores.
Dictionary<string, int> myDictionary = new Dictionary<string, int>();

// Agrega pares clave-valor usando Add()
myDictionary.Add("apple", 1);
myDictionary.Add("banana", 2);
myDictionary.Add("cherry", 3);

// O usa la sintaxis de inicializador de colecciones:
Dictionary<string, int> anotherDictionary = new Dictionary<string, int>()
{
    {"grape", 4},
    {"orange", 5}
};

Accediendo a valores:

Recupera valores usando sus claves. TryGetValue() es más seguro que el indexado directo, manejando casos donde la clave está ausente:


int appleCount;
if (myDictionary.TryGetValue("apple", out appleCount))
{
    Console.WriteLine($"Conteo de manzanas: {appleCount}"); // Salida: Conteo de manzanas: 1
}
else
{
    Console.WriteLine("Manzana no encontrada.");
}

// Acceso directo (lanza KeyNotFoundException si la clave falta)
try
{
    Console.WriteLine($"Conteo de bananas: {myDictionary["banana"]}"); // Salida: Conteo de bananas: 2
}
catch (KeyNotFoundException)
{
    Console.WriteLine("Clave no encontrada.");
}

Iterando a través de un diccionario:


Console.WriteLine("Contenido del diccionario:");
foreach (KeyValuePair<string, int> kvp in myDictionary)
{
    Console.WriteLine($"Clave: {kvp.Key}, Valor: {kvp.Value}");
}

Eliminando elementos:


myDictionary.Remove("banana"); 

Comprobando la existencia de una clave:


if (myDictionary.ContainsKey("cherry"))
{
    Console.WriteLine("Cereza existe.");
}

Uso avanzado y consideraciones

Para escenarios que requieren seguridad de subprocesos, considera ConcurrentDictionary<TKey, TValue>. Al elegir claves, asegúrate de que implementen correctamente GetHashCode() y Equals() para evitar colisiones y mantener la eficiencia del mapa hash. Comprender estos aspectos es crucial para un rendimiento óptimo.

Conclusión

Dictionary<TKey, TValue> en C# es el equivalente efectivo de un HashMap, proporcionando un excelente rendimiento para el almacenamiento de clave-valor. Su versatilidad, combinada con la disponibilidad de alternativas seguras para subprocesos, lo convierte en una estructura de datos fundamental para diversas aplicaciones C#.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *