概述:
介紹字典是 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
針對查詢效能進行最佳化:如果您知道資料的大致大小,請使用該容量初始化字典。
避免頻繁調整大小:不斷新增超出容量的元素會導致字典調整大小,從而影響效能。