C# Dictionary<K, V>
Dictionary<K,V>類(lèi)型可定義鍵/值對(duì)的集合。這個(gè)類(lèi)需要實(shí)例化兩個(gè)類(lèi)型,分別用于鍵和值,以表示集合中的各個(gè)項(xiàng)。
實(shí)例化DictionarycIQ^對(duì)象后,就可以像在繼承自DictionaiyBase的類(lèi)上那樣,對(duì)它執(zhí)行相同的操作,但要使用己有的類(lèi)型安全的方法和屬性。例如,使用強(qiáng)類(lèi)型化的Add()方法添加鍵/值對(duì)。
Dictionary<string, int> things = new Dictionary<string, int>();
things.Add("Green Things", 29);
things.Add("Blue Things", 94);
things.Add("Yellow Things", 34);
things.Add("Red Things", 52);
things.Add("Brown Things", 27);
不使用Add()方法也可以添加鍵/值對(duì),但代碼看起來(lái)不是太優(yōu)雅:
Dictionary<string, int> things = new Dietionary<string, int>(){
{"Green Things",29},
{"Blue Things", 94},
{"Yellow Things", 34},
{"Red Things", 52},
{"Brown Things", 27}
};
可使用Keys和Values屬性迭代集合中的鍵和值:
foreach (string key in things.Keys)
{
WriteLine(key);
}
foreach (int value in things.Values)
{
WriteLine(value);
}
還可以迭代集合中的各個(gè)項(xiàng),把每個(gè)項(xiàng)作為一個(gè)KeyValuePair<K,V>實(shí)例來(lái)獲取,這與DictionaryEntry對(duì)象十分相似:
foreach {KeyValuePair<string, int> thing in things)
{
WriteLine($"{thing.Key} = {thing .Value}");
}
對(duì)于DictionarycK,V>要注意的一點(diǎn)是,每個(gè)項(xiàng)的鍵都必須是唯一的。如果要添加的項(xiàng)的鍵與已有項(xiàng)的鍵相同,就會(huì)拋出ArgumentException異常。所以,Dictionary<K,V>允許把IComparer<K>接口傳遞給其構(gòu)造函數(shù)。 如果要把自己的類(lèi)用作鍵,且它們不支持IComparable或IComparable<K>接口,或者要使用非默認(rèn)的過(guò)程比較對(duì)象,就必須把IComparer<K>接口傳遞給其構(gòu)造函數(shù)。例如,在上例中,可以使用不區(qū)分大小寫(xiě)的方法來(lái)比較 字符串鍵:
Dietionary<string, int> things =
new Dietionary<string, int>(StringComparer.CurrentCulturelgnoreCase);
如果使用下面的鍵,就會(huì)得到一個(gè)異常:
things.Add("Green Things", 29);
things.Add("Green things", 94);
也可以給構(gòu)造函數(shù)傳遞初始容量(使用int)或項(xiàng)的集合(使用IDictionary<K,V>接口)。
若不使用AddO方法或更優(yōu)雅的方法來(lái)填充Dictionary<K,V>類(lèi)型,則可考慮使用索引初始化器,它支持在對(duì)象初始化器內(nèi)部初始化索引:
var things = new Dietionary<string, int>()
{
["Green Things"] = 29,
["Blue Things"] = 94,
["Yellow Things"] = 34,
["Red Things"] = 52,
["Brown Things"] = 27
};
索引初始化器的使用很方便,因?yàn)樵谠S多情況下都不需要通過(guò)var things顯示臨時(shí)變量。使用表達(dá)式體方法, 上例會(huì)級(jí)聯(lián)簡(jiǎn)化的作用并使Dicticmary<K,V>類(lèi)型的初始化最終變得優(yōu)雅:
public Dictionary<string/ int>
SomeThings() => new Dietionary<string, int>
{ ["Green Things"] = 29, ["Blue Things"] = 94 );
點(diǎn)擊加載更多評(píng)論>>