欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

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

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

在C#中,System.Collections.Generic命名空間下的Dictionary類為以鍵值對(duì)的形式存儲(chǔ)和檢索數(shù)據(jù)提供了一種高效的方式。這種數(shù)據(jù)結(jié)構(gòu)功能強(qiáng)大、用途廣泛,并且針對(duì)快速數(shù)據(jù)查找進(jìn)行了高度優(yōu)化,使其非常適用于各種實(shí)際編程場(chǎng)景。

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

C#中的Dictionary是什么?

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

Dictionary的基本語(yǔ)法

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

  • TKey:字典中鍵的類型。

  • TValue:與每個(gè)鍵相關(guān)聯(lián)的值的類型。

以下是一個(gè)示例:

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

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

Dictionary的屬性

字典有幾個(gè)重要的屬性:

  • Count:返回字典中鍵值對(duì)的數(shù)量。

  • 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方法或者索引器語(yǔ)法[]

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

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

從字典中檢索值

最常見(jiàn)的檢索值的方式是使用鍵:

string value = numbers[1];  // 檢索與鍵1相關(guān)聯(lián)的值

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

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

更新現(xiàn)有值

要更新現(xiàn)有值,可以使用帶鍵的索引器語(yǔ)法:

numbers[1] = "Updated One";

如果鍵存在,關(guān)聯(lián)的值將會(huì)被更新;如果鍵不存在,將會(huì)添加一個(gè)新的鍵值對(duì)。

從字典中移除元素

要通過(guò)鍵移除一個(gè)元素,可以使用Remove方法:

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

該方法在元素成功移除時(shí)返回true,否則返回false

檢查鍵或值是否存在

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

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

遍歷字典

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

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

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

初始化字典

字典可以在聲明時(shí)使用集合初始化器進(jìn)行初始化:

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

Dictionary的構(gòu)造函數(shù)

Dictionary類針對(duì)不同場(chǎng)景提供了多個(gè)構(gòu)造函數(shù):

  • 默認(rèn)構(gòu)造函數(shù):初始化一個(gè)空字典。

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

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

var caseInsensitiveDict = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
  • Dictionary(IDictionary<TKey, TValue>):通過(guò)復(fù)制另一個(gè)字典來(lái)初始化一個(gè)字典。

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

鍵的自定義比較器

默認(rèn)情況下,字典對(duì)鍵類型使用默認(rèn)的相等比較器。你可以通過(guò)實(shí)現(xiàn)IEqualityComparer<TKey>來(lái)提供自定義的相等比較器。這對(duì)于不區(qū)分大小寫(xiě)的字符串鍵特別有用:

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

線程安全與ConcurrentDictionary

Dictionary類不是線程安全的。如果多個(gè)線程同時(shí)修改一個(gè)字典,可能會(huì)導(dǎo)致不可預(yù)測(cè)的行為。對(duì)于線程安全的操作,可以使用System.Collections.Concurrent命名空間下的ConcurrentDictionary<TKey, TValue>。

using System.Collections.Concurrent;

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

Dictionary的性能特征

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

Dictionary操作中的常見(jiàn)異常

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

  • ArgumentNullException:如果使用了空鍵。

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

  • KeyNotFoundException:如果訪問(wèn)字典中不存在的鍵。

示例程序

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

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的總結(jié)

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

雖然Dictionary本身不是線程安全的,但ConcurrentDictionary<TKey, TValue>為多線程應(yīng)用程序提供了一種安全的替代方案。無(wú)論你是在開(kāi)發(fā)簡(jiǎn)單還是復(fù)雜的應(yīng)用程序,C#中的字典都是一種用于將數(shù)據(jù)組織成鍵值對(duì)的強(qiáng)大、高性能的解決方案。


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