【C#】-Dictionary的詳細用法

VisionCode發表於2024-05-08

概述:

介紹字典是 C# 中使用最廣泛的資料結構之一,提供快速查詢、鍵值對儲存等。本指南探討了該類,解釋了從基本用法到高階方案的複雜性。DictionaryTKey, TValue詞典基礎什麼是字典?字典是鍵值對的集合,其中每個鍵必須是唯一的。當您需要透過唯一鍵查詢值時,通常使用它。

介紹

字典是 C# 中使用最廣泛的資料結構之一,提供快速查詢、鍵值對儲存等。本指南探討了該類,解釋了從基本用法到高階方案的複雜性。Dictionary<TKey, TValue>

詞典基礎

什麼是字典?

字典是鍵值對的集合,其中每個鍵必須是唯一的。當您需要透過唯一鍵查詢值時,通常使用它。

建立和初始化:

點選檢視程式碼
// Empty dictionary  
var capitals = new Dictionary<string, string>();  
  
// Initialized dictionary  
var fruits = new Dictionary<int, string>  
{  
    { 1, "Apple" },  
    { 2, "Banana" },  
    { 3, "Cherry" }  
};

基本操作

新增條目:

點選檢視程式碼
capitals.Add("USA", "Washington, D.C.");  
capitals.Add("UK", "London");

檢索值:

點選檢視程式碼
string ukCapital = capitals["UK"];  // Returns "London"

檢查金鑰:

點選檢視程式碼
bool hasUK = capitals.ContainsKey("UK");  // Returns true

刪除條目:

點選檢視程式碼
capitals.Remove("UK");

高階概念

遍歷字典:
您可以迴圈訪問鍵和/或值(鍵值對):

點選檢視程式碼
foreach (var key in capitals.Keys)  
    Console.WriteLine(key);  
  
foreach (var value in capitals.Values)  
    Console.WriteLine(value);  
  
foreach (var kvp in capitals)  
    Console.WriteLine($"Country: {kvp.Key}, Capital: {kvp.Value}");

foreach (DictionaryEntry entry in dictionary)
{
    // 訪問鍵和值
    object key = entry.Key;
    object value = entry.Value;
    // 處理鍵值對...
}

Dictionary<TKey, TValue> dictionary = new Dictionary<TKey, TValue>();

var keys = new List<TKey>(dictionary.Keys);
for (int i = 0; i < keys.Count; i++)
{
    var key = keys[i];
    var value = dictionary[key];
    // 處理鍵值對
}

使用以下方法進行值查詢:TryGetValue
當鍵不存在時,不要捕獲異常,而是使用:TryGetValue

點選檢視程式碼
if (capitals.TryGetValue("UK", out string capital))  
    Console.WriteLine(capital);  
else  
    Console.WriteLine("Key not found.");

字典容量和效能:

該類針對快速查詢進行了最佳化。但是,瞭解其容量和有助於最佳化效能,尤其是在處理大型詞典時。DictionaryLoad Factor

容量:字典在不調整大意的情況下可以容納的條目總數。

計數:字典中的當前條目數。

荷載係數: .CountCapacity

比較器:

預設情況下,字典使用鍵的預設比較器。但是,您可以指定自定義比較器:

點選檢視程式碼
var caseInsensitiveDict = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);

併發詞典:

在多執行緒方案中,可能需要執行緒安全操作。從名稱空間使用。ConcurrentDictionarySystem.Collections.Concurrent

與 LINQ 一起使用:Dictionary
字典與 LINQ 無縫協作,允許強大的查詢:

點選檢視程式碼
var filtered = capitals.Where(kvp => kvp.Value.StartsWith("W"))  
                       .ToDictionary(kvp => kvp.Key, kvp => kvp.Value);

高階詞典型別

SortedDictionary<TKey, TValue>:
按鍵的升序儲存鍵值對。當您需要特定順序的資料時很有用。

ReadOnlyDictionary<TKey, TValue>:
提供字典的只讀檢視。保護基礎詞典不被修改。

最佳實踐:
使用正確型別的鍵:鍵在字典中的生存期內應該是不可變的。

注意:字典不允許使用鍵,但允許使用值。nullnullnull

針對查詢效能進行最佳化:如果您知道資料的大致大小,請使用該容量初始化字典。

避免頻繁調整大小:不斷新增超出容量的元素會導致字典調整大小,從而影響效能。

相關文章