Melhor maneira de Iterar sobre um Dicionário em C#

  1. Use for Loop para iterar sobre um dicionário em C
  2. Use o loop foreach para iterar em um dicionário em C
  3. Utilize o método ParallelEnumerable.ForAll para Iterate a Dictionary in C

O dicionário em C# é uma coleção de pares de valores-chave. É algo semelhante ao dicionário de inglês onde a chave representa uma palavra e o valor é seu significado. Neste artigo, analisaremos diferentes maneiras de iterar um dicionário.

Para fins de representação, consideraremos a seguinte definição do objeto do Dicionário ao longo de todo o artigo.

Dictionary<int, string> sample_Dict = new Dictionary<int, string>();

Agora, vamos analisar alguns dos métodos que você pode utilizar para atravessar este dicionário.

Use for Loop para iterar sobre um dicionário em C

O método de loop é fácil e conciso, onde iteracionamos sequencialmente sobre o dicionário utilizando um índice.

using System;
using System.Collections.Generic;

public class Sample{
    public static void Main(){
        Dictionary<int, string> sample_Dict = new Dictionary<int, string>()
        {
            {0,"value_1"},
            {1,"value_2"},
            {2,"value_3"}
        };
        for (int index = 0; index < sample_Dict.Count; index++ )
            System.Console.WriteLine(index + ":" + sample_Dict[index]);
    }
}

Resultado:

0:value_1
1:value_2
2:value_3

Como você notará, também especificamos a lista do inicializador enquanto definimos o objeto do Dicionário. Ao especificar a lista de inicializadores, certifique-se de que cada entrada na lista tenha uma chave única, caso contrário, ela levará à exceção tempo de execução.

Use o loop foreach para iterar em um dicionário em C

o loop foreach é outra alternativa pela qual você pode optar.

using System;
using System.Collections.Generic;

public class Sample{
    public static void Main(){
        Dictionary<int, string> sample_Dict = new Dictionary<int, string>()
        {
            {0,"value_1"},
            {1,"value_2"},
            {2,"value_3"}
        };
        foreach (var entry in sample_Dict)
            System.Console.WriteLine(entry.Key + ":" + entry.Value);
    }
}

Resultado:

0:value_1
1:value_2
2:value_3

O método acima pode ser considerado uma implementação preguiçosa do loop foreach. Também podemos implementar o método foreach utilizando a estrutura KeyValuePair<TKey,TValue>.

using System;
using System.Collections.Generic;

public class Sample{
    public static void Main(){
        Dictionary<int, string> sample_Dict = new Dictionary<int, string>()
        {
            {0,"value_1"},
            {1,"value_2"},
            {2,"value_3"}
        };
        foreach (var entry in sample_Dict)
            System.Console.WriteLine(entry.Key + ":" + entry.Value);
    }
}

Resultado:

0:value_1
1:value_2
2:value_3

Utilize o método ParallelEnumerable.ForAll para Iterate a Dictionary in C

Este método vem a calhar quando se está fazendo iterações sobre grandes dicionários, pois incorpora o processamento multithreading para cada par de valores-chave no dicionário.

using System;
using System.Linq;
using System.Collections.Generic;

public class Sample{
    public static void Main(){
        /*User Code Here*/
        Dictionary<int, string> sample_Dict = new Dictionary<int, string>()
        {
            {0,"value_1"},
            {1,"value_2"},
            {2,"value_3"}
        };
        sample_Dict.AsParallel().ForAll(entry => Console.WriteLine(entry.Key + ":" + entry.Value));
    }
}

Resultado:

0:value_1
1:value_2
2:value_3

Ao analisar o melhor método dentre os mencionados acima, precisamos considerar certos parâmetros e o resultado seria circunstancial. O método de looping é conciso e eficaz, mas ao iterar grandes dicionários, torna-se impraticável em termos de complexidade de tempo de execução.

É aqui que entra o método ParallelEnumerable.ForAll, pois permite a execução simultânea economizando tempo crucial, o que pode ser um fator importante ao projetar determinadas aplicações.

Artigo relacionado - Csharp Dictionary

  • C++ map<T1, T2> Equivalente em C#
  • Classificar dicionário por valor em C#