當前位置:成語大全網 - 新華字典 - C# Dictionary 用法;

C# Dictionary 用法;

C# Dictionary用法總結

1、用法1: 常規用

增加鍵值對之前需要判斷是否存在該鍵,如果已經存在該鍵而且不判斷,將拋出異常。所以這樣每次都要進行判斷,很麻煩,在備註裏使用了壹個擴展方法

public?static?void?DicSample1()

{

Dictionary<String,?String>?pList?=?new?Dictionary<String,?String>();

try

{

if?(pList.ContainsKey("Item1")?==?false)

{

pList.Add("Item1",?"ZheJiang");

}

if?(pList.ContainsKey("Item2")==?false)

{

pList.Add("Item2",?"ShangHai");

}

else

{

pList["Item2"]?=?"ShangHai";

}

if?(pList.ContainsKey("Item3")?==?false)

{

pList.Add("Item3",?"BeiJiang");

}

}

catch?(System.Exception?e)

{

Console.WriteLine("Error:?{0}",?e.Message);

}

//判斷是否存在相應的key並顯示

if?(pList.ContainsKey("Item1"))

{

Console.WriteLine("Output:?"?+?pList["Item1"]);

}

//遍歷Key

foreach?(var?key?in?pList.Keys)

{

Console.WriteLine("Output?Key:?{0}",?key);

}

//遍歷Value

foreach?(String?value?in?pList.Values)

{

Console.WriteLine("Output?Value:?{0}",?value);

}

//遍歷Key和Value

foreach?(var?dic?in?pList)

{

Console.WriteLine("Output?Key?:?{0},?Value?:?{1}?",?dic.Key,?dic.Value);

}

} 

 

2、用法2:Dictionary的Value為壹個數組

///?<summary>

///?Dictionary的Value為壹個數組

///?</summary>

public?static?void?DicSample2()

{

Dictionary<String,?String[]>?dic?=?new?Dictionary<String,?String[]>();

String[]?ZheJiang?=?{?"Huzhou",?"HangZhou",?"TaiZhou"?};

String[]?ShangHai?=?{?"Budong",?"Buxi"?};

dic.Add("ZJ",?ZheJiang);

dic.Add("SH",?ShangHai);

Console.WriteLine("Output?:"?+?dic["ZJ"][0]);

}

3、用法3: Dictionary的Value為壹個類

//Dictionary的Value為壹個類

public?static?void?DicSample3()

{

Dictionary<String,?Student>?stuList?=?new?Dictionary<String,?Student>();

Student?stu?=?null;

for?(int?i?=?0;?i?<?3;?i++?)

{

stu?=?new?Student();

stu.Name?=?i.ToString();

stu.Name?=?"StuName"?+?i.ToString();

stuList.Add(i.ToString(),?stu);

}

foreach?(var?student?in?stuList)

{

Console.WriteLine("Output?:?Key?{0},?Num?:?{1},?Name?{2}",?student.Key,?student.Value.Name,?student.Value.Name);

}

}

Student類:

public?class?Student

{

public?String?Num?{?get;?set;?}

public?String?Name?{?get;?set;?}

} 4 備註:Dictionary的擴展方法使用

///?<summary>

///?Dictionary的擴展方法使用

///?</summary>

public?static?void?DicSample4()

{

//1)普通調用

Dictionary<int,?String>?dict?=?new?Dictionary<int,?String>();

DictionaryExtensionMethodClass.TryAdd(dict,?1,?"ZhangSan");

DictionaryExtensionMethodClass.TryAdd(dict,?2,?"WangWu");

DictionaryExtensionMethodClass.AddOrPeplace(dict,?3,?"WangWu");

DictionaryExtensionMethodClass.AddOrPeplace(dict,?3,?"ZhangWu");

DictionaryExtensionMethodClass.TryAdd(dict,?2,?"LiSi");

//2)TryAdd?和?AddOrReplace?這兩個方法具有較強自我描述能力,用起來很省心,而且也簡單:

dict.AddOrPeplace(20,?"Orange");

dict.TryAdd(21,?"Banana");

dict.TryAdd(22,?"apple");

//3)像Linq或jQuery壹樣連起來寫?

dict.TryAdd(10,?"Bob")

.TryAdd(11,?"Tom")

.AddOrPeplace(12,?"Jom");

//4)?獲取值

String?F?=?"Ba";

dict.TryGetValue(31,?out?F);

Console.WriteLine("F?:?{0}",F);

foreach?(var?dic?in?dict)

{

Console.WriteLine("Output?:?Key?:?{0},?Value?:?{1}",?dic.Key,?dic.Value);

}

//5)下面是使用GetValue獲取值

var?v1?=?dict.GetValue(111,null);

var?v2?=?dict.GetValue(10,"abc");

//6)批量添加

var?dict1?=?new?Dictionary<int,int>();

dict1.AddOrPeplace(3,?3);

dict1.AddOrPeplace(5,?5);

var?dict2?=?new?Dictionary<int,?int>();

dict2.AddOrPeplace(1,?1);

dict2.AddOrPeplace(4,?4);

dict2.AddRange(dict1,?false);

}

擴展方法所在的類

public?static?class?DictionaryExtensionMethodClass

{

///?<summary>

///?嘗試將鍵和值添加到字典中:如果不存在,才添加;存在,不添加也不拋導常

///?</summary>

public?static?Dictionary<TKey,?TValue>?TryAdd<TKey,?TValue>(this?Dictionary<TKey,?TValue>?dict,?TKey?key,?TValue?value)

{

if?(dict.ContainsKey(key)?==?false)

dict.Add(key,?value);

return?dict;

}

///?<summary>

///?將鍵和值添加或替換到字典中:如果不存在,則添加;存在,則替換

///?</summary>

public?static?Dictionary<TKey,?TValue>?AddOrPeplace<TKey,?TValue>(this?Dictionary<TKey,?TValue>?dict,?TKey?key,?TValue?value)

{

dict[key]?=?value;

return?dict;

}

///?<summary>

///?獲取與指定的鍵相關聯的值,如果沒有則返回輸入的默認值

///?</summary>

public?static?TValue?GetValue<TKey,?TValue>(this?Dictionary<TKey,?TValue>?dict,?TKey?key,?TValue?defaultValue)

{

return?dict.ContainsKey(key)?dict[key]?:?defaultValue;

}

///?<summary>

///?向字典中批量添加鍵值對

///?</summary>

///?<param?name="replaceExisted">如果已存在,是否替換</param>

public?static?Dictionary<TKey,?TValue>?AddRange<TKey,?TValue>(this?Dictionary<TKey,?TValue>?dict,?IEnumerable<KeyValuePair<TKey,?TValue>>?values,?bool?replaceExisted)

{

foreach?(var?item?in?values)

{

if?(dict.ContainsKey(item.Key)?==?false?||?replaceExisted)

dict[item.Key]?=?item.Value;

}

return?dict;

}

}