Resumo : neste tutorial, você aprenderá como usar a Dictionary<Tkey, TValue>
classe C# para gerenciar dicionários de maneira eficaz.
Introdução ao dicionário C#<TKey,TValue>
A Dictionary<TKey,TValue>
classe representa uma coleção de chaves e valores. Pertence ao System.Collections.Generic
espaço para nome. Os TKey
e TValue
são os tipos de chaves e valores no dicionário.
Cada chave em um dicionário deve ser única. Além disso, uma chave não pode ser null
se seu tipo for um tipo de referência. Se uma chave for um objeto, ela não deve ser alterada de forma alguma que afete sua exclusividade (ou valor de hash).
Como o C# é implementado Dictionary<TKey, TValue)
como uma tabela hash, recuperar um valor por chave é muito rápido.
Crie um dicionário
O seguinte cria um dicionário no qual chaves e valores são strings:
Dictionary<string,string> states = new Dictionary<string,string>();
Linguagem de código: C# ( cs )
Alternativamente, você pode usar a var
palavra-chave:
var states = new Dictionary<string, string>();
Linguagem de código: C# ( cs )
Preenchendo dicionário
Para adicionar a chave e o valor especificados a um dicionário, você usa o Add()
método. Por exemplo, o seguinte adiciona três pares chave/valor ao states
dicionário:
var states = new Dictionary<string,string>();
states.Add("CA", "California");
states.Add("TX", "Texas");
states.Add("NY", "New York");
Linguagem de código: C# ( cs )
Neste exemplo, as chaves são a abreviatura do estado e os valores são os nomes dos estados.
Além disso, você pode usar um inicializador de coleção para adicionar pares chave/valor a um dicionário ao criá-lo. Por exemplo:
var states = new Dictionary<string, string>()
{
{"CA","California" },
{"TX","Texas" },
{"NY", "New York" }
};
Linguagem de código: C# ( cs )
Nesta sintaxe, você coloca um par chave/valor entre chaves e envolve todos os elementos entre chaves externas.
Recuperando um elemento de um dicionário
Para acessar um elemento, você usa um colchete e a chave do elemento assim:
dict[key]
Linguagem de código: CSS ( css )
Por exemplo, a seguir mostramos como acessar os elementos com chaves “CA” e “NY”:
var states = new Dictionary<string, string>()
{
{"CA","California" },
{"TX","Texas" },
{"NY", "New York" }
};
Console.WriteLine(states["CA"]);
Console.WriteLine(states["NY"]);
Linguagem de código: C# ( cs )
Saída:
California
New York
Linguagem de código: texto simples ( texto simples )
Se você tentar usar uma chave que não existe, receberá uma KeyNotFound
exceção:
var states = new Dictionary<string, string>()
{
{"CA","California" },
{"TX","Texas" },
{"NY", "New York" }
};
Console.WriteLine(states["AZ"]); // Exception
Linguagem de código: C# ( cs )
Felizmente, você pode verificar se existe uma chave antes de acessar o elemento usando um ContainKeys()
método como este:
var states = new Dictionary<string, string>()
{
{"CA","California" },
{"TX","Texas" },
{"NY", "New York" }
};
if (states.ContainsKey("AZ"))
{
Console.WriteLine(states["AZ"]);
}
else
{
Console.WriteLine("No state with the abbreviation AZ exists");
}
Linguagem de código: C# ( cs )
Saída:
No state with the abbreviation AZ exists
Linguagem de código: texto simples ( texto simples )
Além disso, você pode usar o TryGetValue()
método se não tiver certeza se a chave existe:
var states = new Dictionary<string, string>()
{
{"CA","California" },
{"TX","Texas" },
{"NY", "New York" }
};
string state;
if(states.TryGetValue("CA", out state))
{
Console.WriteLine(state);
}
Linguagem de código: C# ( cs )
Saída:
California
Iterando através de um dicionário
Para iterar todos os elementos de um dicionário, você usa a foreach
instrução. O exemplo a seguir usa a foreach
instrução para iterar todos os elementos do states
dicionário:
var states = new Dictionary<string, string>()
{
{"CA","California" },
{"TX","Texas" },
{"NY", "New York" }
};
foreach (var state in states)
{
Console.WriteLine($"{state.Key}: {state.Value}");
}
Linguagem de código: C# ( cs )
Em cada iteração, a foreach
instrução atribui o elemento do dicionário atual à variável de estado.
O tipo de cada elemento é a struct KeyValuePair<TKey,TValue>
que contém duas propriedades: Key
e Value
.
Para acessar todas as chaves de um dicionário, você usa a Keys
propriedade. Por exemplo:
var states = new Dictionary<string, string>()
{
{"CA","California" },
{"TX","Texas" },
{"NY", "New York" }
};
foreach (var stateAbbr in states.Keys)
{
Console.WriteLine(stateAbbr);
}
Linguagem de código: C# ( cs )
Saída:
CA
TX
NY
Linguagem de código: texto simples ( texto simples )
Para acessar apenas os valores de um dicionário, você usa a Values
propriedade. Por exemplo:
var states = new Dictionary<string, string>()
{
{"CA","California" },
{"TX","Texas" },
{"NY", "New York" }
};
foreach (var stateName in states.Values)
{
Console.WriteLine(stateName);
}
Linguagem de código: PHP ( php )
Saída:
California
Texas
New York
Linguagem de código: PHP ( php )
Usando um dicionário para simplificar a instrução if…else
O GetDay()
método a seguir retorna o nome do dia com base em um número de dia de 1 a 7 usando uma if...else
instrução:
string GetDay(int day)
{
if (day == 1)
{
return "Sunday";
}
else if (day == 2)
{
return "Monday";
}
else if (day == 3)
{
return "Tuesday";
}
else if (day == 4)
{
return "Wednesday";
}
else if (day == 5)
{
return "Thursday";
}
else if (day == 6)
{
return "Friday";
}
else if (day == 7)
{
return "Saturday";
}
else
{
return "Invalid";
}
}
Linguagem de código: C# ( cs )
Para simplificar o código, você pode usar um dicionário para procurar o nome do dia com base em um número de dia como este:
string GetDay(int day)
{
var days = new Dictionary<int, string>()
{
{1, "Sunday" },
{2, "Monday" },
{3, "Tuesday" },
{4, "Wednesday" },
{5, "Thursday" },
{6, "Friday" },
{7, "Saturday" },
};
if (days.ContainsKey(day))
{
return days[day];
}
return "Invalid";
}
Linguagem de código: C# ( cs )
Resumo
- Use o
Dictionary<TKey,TValue>
para gerenciar dicionários de forma eficaz. - Use o método
ContainsKey
ouTryGetValue
se não tiver certeza se a chave existe ou não.