C# 中遍歷字典的最佳方法

Puneet Dobhal 2023年1月30日 2020年6月9日
  1. 使用 for 迴圈迭代 C# 中的字典
  2. 使用 foreach 迴圈遍歷 C# 中的字典
  3. 使用 ParallelEnumerable.ForAll 方法迭代 C# 中的字典
C# 中遍歷字典的最佳方法

C# 中的字典是鍵值對的集合。它有點類似於英語字典,其中 key 代表一個單詞,而 value 是其含義。在本文中,我們將研究迭代字典的不同方法。

出於表示目的,我們將在整篇文章中用以下 Dictionary 物件的定義。

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

現在,讓我們看一下可用於遍歷此字典的一些方法。

使用 for 迴圈迭代 C# 中的字典

for 迴圈方法簡單明瞭,我們使用索引依次遍歷字典。

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

輸出:

0:value_1
1:value_2
2:value_3

你會注意到,在定義 Dictionary 物件時,我們還指定了初始化列表。指定初始化程式列表時,請確保列表中的每個元素都具有唯一鍵,否則,將導致執行時異常。

使用 foreach 迴圈遍歷 C# 中的字典

foreach 迴圈是我們可以選擇的另一種方法。

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

輸出:

0:value_1
1:value_2
2:value_3

可以將上述方法視為 foreach 迴圈的惰性實現。我們還可以使用 KeyValuePair<TKey,TValue> 結構來實現 foreach 方法。

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

輸出:

0:value_1
1:value_2
2:value_3

使用 ParallelEnumerable.ForAll 方法迭代 C# 中的字典

當你遍歷大型字典時,此方法會派上用場,因為它為字典中的每個鍵值對合並了多執行緒處理。

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

輸出:

0:value_1
1:value_2
2:value_3

在分析上述最佳方法時,我們需要考慮某些引數,其結果將是偶然的。迴圈方法簡潔有效,但是在迭代大型字典時,就執行時複雜性而言,它變得不切實際。

這是 ParallelEnumerable.ForAll 方法出現的地方,因為它允許併發執行節省關鍵時間,這可能是設計某些應用程式時的重要因素。

相關文章 - Csharp Dictionary