Índice
1 - Qué es un Diccionario en C#?
En C# Tenemos el tipo diccionario el cual es una colección que nos permite almacenar datos de forma clave-valor
(key-value); El cual utiliza tipos específicos a través de generics tanto para su clave como para el valor.
Un diccionario se describe con el tipo Dictionary<TKey, TValue>
y por detrás utiliza KeyValuePair<Tkey, TValue>
para cada uno de los elementos.
Esto quiere decir que el valor que indicamos en como Key tiene que ser único.
Antiguamente utilizabamos Hashtable
, pero con la llegada de generics, utilizamos Dictionary
, esto es debido, a que para que funcione en hashtable
, guardamos el objeto como tipo Object
lo que implica boxing
y unboxing
con cada operación, y que no tiene las ventajas de generics.
2 - Crear un diccionario y añadir elementos en C#
Para crear un diccionario en C# únicamente debemos instanciarlo, y para añadirle elementos, lo podemos hacer en la instanciación, o a través del método .Add()
.
//inicialización y crear a valores
Dictionary<string, string> comunidadesCapitales = new Dictionary<string, string>()
{
{"Aragon", "Zaragoza"},
{"Navarra", "Pamplona"}
};
//añadir valores
comunidadesCapitales.Add("Castilla la mancha", "Toledo");
Como he mencionado, la key debe ser única por lo que la "comunidad autónoma" no puede estar repetida, si intentas añadir “Aragon”
otra vez, nos saltará una excepción.
3 - Acceder a los elementos de un diccionario en C#
Para acceder a los elementos de un diccionario lo hacemos a través del indexer. y tendremos que utilizar el tipo de la key que hemos utilizado en la creación de nuestro diccionario
Y cuando imprimimos nos devuelve el valor:
Console.WriteLine(comunidadesCapitales["Aragon"]); //devuelve Zaragoza
SI lo que queremos es acceder por posición lo podemos hacer a través del método .ElementAt(posición)
;
Pero en este caso nos devuelve un tipo KeyValuePair<TKey, TValue>
por lo que para imprimir el valor, debemos acceder a .Value
:
KeyValuePair<string, string> resultado = comunidadesCapitales.ElementAt(0);
Console.WriteLine(resultado.Value); //devuelve Zaragoza
3.1 - La forma óptima de acceder a los elementos en un diccionario C#
La forma más óptima para acceder a los elementos de un diccionario es utilizar .TryGetValue()
esto es porque si intentamos acceder a un elemento inexistente mediante el indexer nos saltará una excepción, mientras que si lo hacemos a través de TryGetValue()
no.
Pero tiene una forma un poco diferente de funcionar. Cuando llamamos a .TryGetValue()
lo que hacemos es comprobar si el valor existe, por lo que el método nos devuelve un booleano true
o false
.
Y el valor actual del elemento lo recibimos del out parameter
del método:
if (comunidadesCapitales.TryGetValue("Aragon", out string resultadoCapital))
{
Console.WriteLine(resultadoCapital); //zaragoza
}
else
{
Console.WriteLine("el parámetro no existe");
}
3.2 - Actualizar elementos en un diccionario c#
Para acceder a los elementos de un diccionario lo hacemos a través del indexer, pero para ello debemos comprobar si ese valor existe. Podemos utilizar el método .ContainsKey()
el cual nos devolverá verdadero o falso y una vez sepamos que existe, podemos cambiarlo
if(comunidadesCapitales.ContainsKey("Aragon"))
{
comunidadesCapitales["Aragon"] = "Teruel Existe";
}
3.3 - Eliminar elementos de un diccionario en C#
Si lo que queremos es eliminar elementos de un diccionario debemos utilizar el método .Remove(key)
; pero tenemos que tener cuidado, ya que si la key no existe, nos saltará una excepción.
Y opcionalmente podemos ejecutar .Clear()
el cual limpiará todos los elementos.
comunidadesCapitales.Remove("Aragon");
comunidadesCapitales.Clear();
Conclusión
En este post hemos visto cómo crear diccionarios y añadir elementos
Cómo leer elementos de un diccionario
Cómo Eliminar elementos de un diccionario