LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

C# 語言中詞典(Dictionary)使用方法

admin
2024年12月27日 7:56 本文熱度 258

在C#中,System.Collections.Generic命名空間下的Dictionary類為以鍵值對的形式存儲和檢索數據提供了一種高效的方式。這種數據結構功能強大、用途廣泛,并且針對快速數據查找進行了高度優化,使其非常適用于各種實際編程場景。

本文將讓你深入了解C#中的Dictionary<TKey, TValue>——包括它的結構、屬性、方法以及使用示例。

C#中的Dictionary是什么?

Dictionary<TKey, TValue>是一種泛型集合,它將數據存儲為鍵值對的形式。字典中的每個鍵都是唯一的,并且映射到一個值。在C#中,如果有高效的哈希函數,字典對于添加、檢索和刪除數據等操作具有O(1)的時間復雜度,這使得它們成為高性能應用程序的絕佳選擇。

Dictionary的基本語法

要聲明一個字典,需要指定兩種類型:

  • TKey:字典中鍵的類型。

  • TValue:與每個鍵相關聯的值的類型。

以下是一個示例:

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

在這個示例中,myDictionary使用int作為鍵類型,string作為值類型。

Dictionary的屬性

字典有幾個重要的屬性:

  • Count:返回字典中鍵值對的數量。

  • Keys:返回字典中所有鍵的集合。

  • Values:返回字典中所有值的集合。

  • Comparer:獲取用于比較鍵的相等比較器。

以下是展示如何使用這些屬性的示例:

var fruits = new Dictionary<string, int>
{
   {"Apple", 1},
   {"Banana", 2}
};

Console.WriteLine(fruits.Count); // 輸出:2
foreach (var key in fruits.Keys)
{
   Console.WriteLine(key); // 輸出:Apple, Banana
}
foreach (var value in fruits.Values)
{
   Console.WriteLine(value); // 輸出:1, 2
}

向字典中添加元素

要向字典中添加元素,可以使用Add方法或者索引器語法[]

Dictionary<int, string> numbers = new Dictionary<int, string>();
numbers.Add(1, "One");
numbers[2] = "Two"; // 使用索引器語法

注意:如果嘗試使用Add方法添加重復的鍵,將會拋出ArgumentException異常。然而,索引器語法[]在鍵已存在的情況下會更新對應的值。

從字典中檢索值

最常見的檢索值的方式是使用鍵:

string value = numbers[1];  // 檢索與鍵1相關聯的值

如果鍵不存在,將會拋出KeyNotFoundException異常。為了安全地處理這種情況,可以使用TryGetValue方法,該方法在鍵存在時返回true,并將關聯的值賦給out參數:

if (numbers.TryGetValue(2, out string result))
{
   Console.WriteLine(result);
}
else
{
   Console.WriteLine("鍵未找到");
}

更新現有值

要更新現有值,可以使用帶鍵的索引器語法:

numbers[1] = "Updated One";

如果鍵存在,關聯的值將會被更新;如果鍵不存在,將會添加一個新的鍵值對。

從字典中移除元素

要通過鍵移除一個元素,可以使用Remove方法:

numbers.Remove(1); // 移除鍵為1的鍵值對

該方法在元素成功移除時返回true,否則返回false。

檢查鍵或值是否存在

要檢查字典中是否存在特定的鍵或值,可以使用ContainsKeyContainsValue方法:

bool hasKey = numbers.ContainsKey(1); // 如果鍵1存在則返回true
bool hasValue = numbers.ContainsValue("Two"); // 如果值為"Two"被找到則返回true

遍歷字典

可以使用foreach語句遍歷Dictionary,其中每個元素都是一個KeyValuePair<TKey, TValue>

foreach (KeyValuePair<int, string> kvp in numbers)
{
   Console.WriteLine($"鍵:{kvp.Key},值:{kvp.Value}");
}

或者,也可以使用KeysValues屬性僅遍歷鍵或值。

初始化字典

字典可以在聲明時使用集合初始化器進行初始化:

var myDictionary = new Dictionary<int, string>
{
   { 1, "One" },
   { 2, "Two" },
   { 3, "Three" }
};

Dictionary的構造函數

Dictionary類針對不同場景提供了多個構造函數:

  • 默認構造函數:初始化一個空字典。

var myDictionary = new Dictionary<int, string>();
  • Dictionary(int capacity):使用指定的容量初始化一個字典,如果已知大小,這樣做可以提高性能。

var myDictionary = new Dictionary<int, string>(100);
  • Dictionary(IEqualityComparer<TKey>):使用指定的用于自定義鍵比較的相等比較器初始化一個字典。

var caseInsensitiveDict = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
  • Dictionary(IDictionary<TKey, TValue>):通過復制另一個字典來初始化一個字典。

var anotherDictionary = new Dictionary<int, string>(myDictionary);

鍵的自定義比較器

默認情況下,字典對鍵類型使用默認的相等比較器。你可以通過實現IEqualityComparer<TKey>來提供自定義的相等比較器。這對于不區分大小寫的字符串鍵特別有用:

var caseInsensitiveDict = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
caseInsensitiveDict.Add("Hello", "World");
Console.WriteLine(caseInsensitiveDict.ContainsKey("hello")); // 輸出:True

線程安全與ConcurrentDictionary

Dictionary類不是線程安全的。如果多個線程同時修改一個字典,可能會導致不可預測的行為。對于線程安全的操作,可以使用System.Collections.Concurrent命名空間下的ConcurrentDictionary<TKey, TValue>。

using System.Collections.Concurrent;

ConcurrentDictionary<int, string> safeDict = new ConcurrentDictionary<int, string>();
safeDict.TryAdd(1, "One");

Dictionary的性能特征

由于哈希的作用,在大多數情況下,字典對于檢索、插入和刪除操作具有O(1)的復雜度,所以效率很高。然而,如果哈希函數不佳,性能可能會下降,導致沖突增多以及操作變慢。

Dictionary操作中的常見異常

C#中的字典可能會拋出以下異常:

  • ArgumentNullException:如果使用了空鍵。

  • ArgumentException:如果使用Add方法添加重復的鍵。

  • KeyNotFoundException:如果訪問字典中不存在的鍵。

示例程序

以下示例展示了字典的基本操作:

using System;
using System.Collections.Generic;

class Program
{
   static void Main()
   {
       var dictionary = new Dictionary<int, string>
       {
           {1, "one"},
           {2, "two"},
           {3, "three"}
       };

       // 檢索值
       Console.WriteLine(dictionary[2]); // 輸出:two

       // 更新元素
       dictionary[2] = "updated two";

       // 移除元素
       dictionary.Remove(1);

       // 遍歷字典
       foreach (var kvp in dictionary)
       {
           Console.WriteLine($"鍵:{kvp.Key},值:{kvp.Value}");
       }

       // 檢查存在性
       Console.WriteLine(dictionary.ContainsKey(2)); // 輸出:True
   }
}

C#中Dictionary的總結

在C#中,Dictionary<TKey, TValue>類是一種用于高效存儲鍵值對的重要數據結構。它提供了廣泛的功能,用于添加、檢索、更新和移除元素,并且針對快速數據訪問進行了優化。字典允許通過相等比較器進行定制,支持多種初始化方法,使其適用于許多用例。

雖然Dictionary本身不是線程安全的,但ConcurrentDictionary<TKey, TValue>為多線程應用程序提供了一種安全的替代方案。無論你是在開發簡單還是復雜的應用程序,C#中的字典都是一種用于將數據組織成鍵值對的強大、高性能的解決方案。


該文章在 2024/12/28 12:23:40 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
亚洲线精品一区二区三区 | 亚洲电影手机在线五月 | 在线精品国精品国产尤物 | 亚洲论片在线观看 | 日本免费一区小泽玛利亚视频 | 呦呦日韩欧美一区二区 |