La mejor manera de iterar sobre un diccionario

  1. Usando el bucle for iterar sobre un Diccionario en C
  2. Usando el bucle foreach para iterar sobre un diccionario en C
  3. Usando el método ParallelEnumerable.ForAll para iterar un diccionario en C

El diccionario en C# es una colección de pares clave-valor. Es algo similar al diccionario inglés donde la clave representa una palabra y el valor es su significado. En este artículo, veremos diferentes formas de iterar un diccionario.

Con fines de representación, consideraremos la siguiente definición del objeto del diccionario a lo largo del artículo.

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

Ahora, veamos algunos de los métodos que puedes usar para recorrer este diccionario.

Usando el bucle for iterar sobre un Diccionario en C

El método for el bucle es fácil y conciso, donde iteramos secuencialmente sobre el diccionario usando un í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]);
    }
}

Producción:

0:value_1
1:value_2
2:value_3

Como notarán, también hemos especificado la lista de inicialización al definir el objeto del diccionario. Mientras se especifica la lista inicializadora, asegúrese de que cada entrada de la lista tiene una clave única, de lo contrario, se producirá una excepción Run-time.

Usando el bucle foreach para iterar sobre un diccionario en C

El looping es otra alternativa a la que puedes 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);
    }
}

Producción:

0:value_1
1:value_2
2:value_3

El método anterior puede ser considerado una implementación perezosa del bucle foreach. También podemos implementar el método foreach usando la estructura 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);
    }
}

Producción:

0:value_1
1:value_2
2:value_3

Usando el método ParallelEnumerable.ForAll para iterar un diccionario en C

Este método resulta útil cuando se itera sobre grandes diccionarios, ya que incorpora un procesamiento multihilo para cada par de claves-valor del diccionario.

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));
    }
}

Producción:

0:value_1
1:value_2
2:value_3

Cuando se analiza el mejor método de los mencionados, necesitamos considerar ciertos parámetros y el resultado sería circunstancial. El método de bucle es conciso y efectivo pero cuando se itera en grandes diccionarios se vuelve poco práctico en términos de complejidad de tiempo de ejecución.

Aquí es donde entra en juego el método ParallelEnumerable.ForAll, ya que permite la ejecución simultánea ahorrando un tiempo crucial, que puede ser un factor importante a la hora de diseñar ciertas aplicaciones.

Artículo relacionado - Csharp Dictionary

  • Obtener valor de diccionario por clave en C#
  • C++ map<T1, T2> Equivalente en C#