🗂️ 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 bucleUpdate(), 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
foreaches sensiblemente más lento que recorrer un Array o unaList<T>directa, porque la memoria no está contigua.

🖥️ 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);
}