Il modo migliore per iterare su un dizionario in C#

Puneet Dobhal 12 ottobre 2023
  1. Usa il cicli for per iterare su un dizionario in C#
  2. Usa il bucle foreach per ripetere su un dizionario in C#
  3. Utilizzare il metodo ParallelEnumerable.ForAll per iterare un dizionario in C#
Il modo migliore per iterare su un dizionario in C#

Il dizionario in C# è una raccolta di coppie chiave-valore. È in qualche modo simile al dizionario inglese dove la chiave rappresenta una parola e valore è il suo significato. In questo articolo, esamineremo diversi modi di iterare un dizionario.

Per scopi rappresentativi, prenderemo in considerazione la seguente definizione dell’oggetto Dictionary in tutto l’articolo.

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

Ora, diamo un’occhiata ad alcuni dei metodi che puoi usare per attraversare questo dizionario.

Usa il cicli for per iterare su un dizionario in C#

Il metodo del cicli for è semplice e conciso, in cui iteriamo sequenzialmente sul dizionario usando un indice.

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

Produzione:

0 : value_1 1 : value_2 2 : value_3

Come noterai, abbiamo anche specificato l’lista degli inizializzatori durante la definizione dell’oggetto Dictionary. Mentre specifichi l’lista degli inizializzatori, assicurati che ogni voce nell’lista abbia una chiave univoca, altrimenti porterà all’eccezione Run-time.

Usa il bucle foreach per ripetere su un dizionario in C#

Il bucle foreach è un’altra alternativa che puoi scegliere.

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

Produzione:

0 : value_1 1 : value_2 2 : value_3

Il metodo sopra può essere considerato un’implementazione pigra del bucle foreach. Possiamo anche implementare il metodo foreach utilizzando la struttura 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);
  }
}

Produzione:

0 : value_1 1 : value_2 2 : value_3

Utilizzare il metodo ParallelEnumerable.ForAll per iterare un dizionario in C#

Questo metodo è utile quando si esegue l’iterazione su dizionari di grandi dimensioni, poiché incorpora l’elaborazione multithreading per ciascuna coppia chiave-valore nel dizionario.

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

Produzione:

0 : value_1 1 : value_2 2 : value_3

Quando si analizza il metodo migliore tra quelli sopra menzionati, è necessario considerare alcuni parametri e il risultato sarebbe circostanziale. Il metodo del bucle è conciso ed efficace, ma quando si iterano dizionari di grandi dimensioni diventa poco pratico in termini di complessità del tempo di esecuzione.

È qui che entra in gioco il metodo ParallelEnumerable.ForAll in quanto consente l’esecuzione simultanea di risparmiare tempo cruciale, che può essere un fattore importante durante la progettazione di determinate applicazioni.

Articolo correlato - Csharp Dictionary