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

Puneet Dobhal 12 outubro 2023
  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#
Melhor maneira de Iterar sobre um Dicionário em 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