Diccionarios

🗂️ Dictionary<TKey, TValue> (Diccionarios)

El archivador de fichas. Buscas directamente por una clave (Key) para encontrar su valor asociado al instante sin recorrer todo.

⚙️ Estructura

Son una estructura de datos que almacena un conjunto de pares clave-valor, donde cada clave (Key) se asocia con un valor (Value) específico.

Los Diccionarios permiten buscar directamente por una clave (Key) para encontrar su valor asociado al instante sin recorrer todo el conjunto de pares clave-valor.

📝 Ventajas

  • Búsqueda eficiente: Los Diccionarios permiten buscar directamente por una clave (Key) para encontrar su valor asociado al instante sin recorrer todo el conjunto de pares clave-valor.
  • Agregación y eliminación de pares: Los Diccionarios permiten agregar y eliminar pares clave-valor de manera eficiente.
  • Reutilización de código: Los Diccionarios permiten reutilizar código al definir un conjunto de pares clave-valor que se pueden utilizar en diferentes partes del programa.

🚧 Desventajas

  • Mayor consumo de memoria (Overhead): Ocupan bastante más RAM que un Array o una List<T>, porque internamente no guardan solo los datos, sino también las claves, los códigos Hash y arrays auxiliares de gestión para que las búsquedas sean rápidas.
  • Impacto en el Garbage Collector (GC): Si insertas (Add) o eliminas (Remove) elementos constantemente dentro de un bucle Update(), el diccionario redimensionará sus estructuras internas. Esto genera basura en la memoria RAM y provoca picos de congelación (stuttering) en el juego.
  • Sin orden garantizado: Los elementos en un diccionario no están ordenados por índice ni por orden de llegada. Si necesitas acceder al «primer», «segundo» o «último» elemento guardado, un diccionario no es la estructura adecuada.
  • Costo inicial al calcular el Hash: Cada vez que buscas o añades una clave, C# ejecuta un cálculo matemático (GetHashCode()). Para claves numéricas (int) o cadenas (string) es imperceptible, pero si usas Enums sin cuidado (en versiones antiguas) u objetos muy complejos como clave, el cálculo de ese Hash puede restar un pellizco de rendimiento.
  • Iteración más lenta que un Array: Aunque buscar una clave concreta es instantáneo, recorrer todos sus elementos con un foreach es sensiblemente más lento que recorrer un Array o una List<T> directa, porque la memoria no está contigua.
Estructura de datos - Diccionario. Generada con IA
Estructura de datos – Diccionario. Generada con IA

🖥️ Código fuente – CRUD (ejemplo)

Creación

    public void AddCharacter(string name, int health, int strength)
    {
        Character character = new Character { Name = name, Health = health, Strength = strength };
        characters.Add(name, character);
    }

Lectura

    public Character GetCharacter(string name)
    {
        return characters[name];
    }

Modificación

    public void UpdateCharacter(string name, int health, int strength)
    {
        Character character = characters[name];
        character.Health = health;
        character.Strength = strength;
    }

Eliminación

    public void RemoveCharacter(string name)
    {
        characters.Remove(name);
    }