English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C# Dictionary (diccionario)

Dictionary<TKey, TValue> es una colección genérica que almacena pares clave-valor en un orden no específico.

Características del diccionario

  • Dictionary<TKey, TValue> almacena pares clave-valor.

  • Pertenece al espacio de nombres System.Collection.Generic.

  • Implementar la interfaz IDictionary<TKey, TValue>.

  • La clave debe ser única y no puede ser nula.

  • Los valores pueden ser nulos o repetidos.

  • Se puede acceder a los valores pasando una clave relevante al indexador, por ejemplo myDictionary[key]

  • Los elementos se almacenan como objetos KeyValuePair<TKey, TValue>.

Crear diccionario

Se puede crear un diccionario pasando un objeto Dictionary<TKey, TValue> para definir los tipos de clave y valor que puede almacenar. El siguiente ejemplo muestra cómo crear un diccionario y agregar pares clave-valor.

IDictionary<int, string> numberNames = new Dictionary<int, string>();
numberNames.Add(1, \ //Agregar claves utilizando el método Add()/Valor
numberNames.Add(2, \
numberNames.Add(3, \
//La siguiente línea provoca una excepción en tiempo de ejecución: clave ya agregada.
//numberNames.Add(3, \ 
foreach(KeyValuePair<int, string> kvp in numberNames)
    Console.WriteLine("Key: {0}, Value: {1}	kvp.Key, 	kvp.Value);
//Usar colección-Sintaxis de inicializador para crear diccionarios
var cities = new Dictionary<string, string>(){
	{"UK", "London, Manchester, Birmingham"},
	{"USA", "Chicago, New York, Washington"},
	{"India", "Mumbai, New Delhi, Pune"}
;
foreach(var kvp in cities)
    Console.WriteLine("Key: {0}, Value: {1}	kvp.Key, 	kvp.Value);

En el ejemplo anterior, numberNames es un diccionario de tipo Dictionary<int, string>, por lo que puede almacenar claves de tipo int y valores de tipo string. Del mismo modo, cities es un diccionario de tipo Dictionary<string, string>, por lo que puede almacenar claves y valores de tipo string. Los diccionarios no pueden contener claves repetidas o nulas, mientras que los valores pueden ser repetidos o nulos. La clave debe ser única, de lo contrario se generará una excepción en tiempo de ejecución.

Acceder a los elementos del diccionario

Se puede acceder a los diccionarios utilizando indexadores. Especificar una clave para obtener el valor asociado. También se puede obtener un KeyValuePair desde el índice especificado utilizando el método ElementAt().

var cities = new Dictionary<string, string>(){
	{"UK", "London, Manchester, Birmingham"},
	{"USA", "Chicago, New York, Washington"},
	{"India", "Mumbai, New Delhi, Pune"}
;
Console.WriteLine(cities["UK"]); //打印 UK 键值
Console.WriteLine(cities["USA"]);//打印 USA 键值
//Console.WriteLine(cities["France"]); // 运行时异常:run-time exception: Key does not exist
//使用ContainsKey()检查未知键
if(cities.ContainsKey("France")){  
    Console.WriteLine(cities["France"]);
}
//使用TryGetValue()获取未知键的值
string result;
if(cities.TryGetValue("France", out result))
{
    Console.WriteLine(result);
}
//使用ElementAt()通过索引检索键值对
for (int i = 0; i < cities.Count; i++)
{
    Console.WriteLine("Key: {0}, Value: {1}
}

更新字典

通过在索引器中指定键来更新键的值。如果字典中不存在键,它将抛出KeyNotFoundException,因此在访问未知键之前使用ContainsKey()方法

var cities = new Dictionary<string, string>(){
	{"UK", "London, Manchester, Birmingham"},
	{"USA", "Chicago, New York, Washington"},
	{"India", "Mumbai, New Delhi, Pune"}
;
cities["UK"] = "Liverpool, Bristol"; //更新 UK 键的值
cities["USA"] = "Los Angeles, Boston"; //更新 USA 键的值
//cities["France"] = "Paris"; //Lanza una excepción de tiempo de ejecución: KeyNotFoundException
if(cities.ContainsKey("France")){
    cities["France"] = "Paris";
}

删除字典中的元素

Remove()方法从字典中删除现有的键值对。Clear()方法删除字典中的所有元素。

var cities = new Dictionary<string, string>(){
	{"UK", "London, Manchester, Birmingham"},
	{"USA", "Chicago, New York, Washington"},
	{"India", "Mumbai, New Delhi, Pune"}
;
cities.Remove("UK"); // Eliminar 'UK' 
//Eliminar 'UK' //Lanza una excepción de tiempo de ejecución: KeyNotFoundException
if(cities.ContainsKey("France")){ // Antes de extraer la clave, revise
    Eliminar 'UK'
}
cities.Clear(); //Eliminar todos los elementos

Estructura jerárquica de la clase Dictionary

La siguiente imagen ilustra la estructura jerárquica de la clase Dictionary genérica.

Puede obtener más información sobre métodos y propiedades de diccionario en docs.microsoft.com.