位置:首頁 > 軟件操作教程 > 編程開發(fā) > C# > 問題詳情

C# Dictionary<K, V>

提問人:劉團(tuán)圓發(fā)布時間:2020-12-08

    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 );

繼續(xù)查找其他問題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部