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