Dicionário C#

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.Genericespaço para nome. Os TKeye TValuesã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 nullse 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 varpalavra-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 statesdicioná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 YorkLinguagem de código:  texto simples  ( texto simples )

Se você tentar usar uma chave que não existe, receberá uma KeyNotFoundexceção:

var states = new Dictionary<string, string>()
{
    {"CA","California" },
    {"TX","Texas" },
    {"NY", "New York" }
};

Console.WriteLine(states["AZ"]); // ExceptionLinguagem 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 existsLinguagem 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 foreachinstrução. O exemplo a seguir usa a foreachinstrução para iterar todos os elementos do statesdicioná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 foreachinstruçã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: Keye Value.

Para acessar todas as chaves de um dicionário, você usa a Keyspropriedade. 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
NYLinguagem de código:  texto simples  ( texto simples )

Para acessar apenas os valores de um dicionário, você usa a Valuespropriedade. 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 YorkLinguagem 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...elseinstruçã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 ContainsKeyou TryGetValuese não tiver certeza se a chave existe ou não.