首先,我們來看一個例子,簡單了解Dictionary的使用時機。
當某集合內的值順序是打亂的,則使用Array或List來讀取值的效能都不高!
為什麼?讓我們繼續看下去~
以此例,我想知道學號500210003學生的姓名與性別,但很不巧,
學生的學號並沒有依照順序排列,因此必須使用迴圈一一判斷哪個學生物件的ID=500210003。
static void Main(string[] args)
{
Student[] stuArr = new Student[5]
{
new Student(500210001, "Lucy", 'F') ,
new Student(500210005, "Yuta", 'M') ,
new Student(500210002, "Pei", 'F') ,
new Student(500210003, "Tim", 'M') ,
new Student(500210004, "Jack", 'M')
};
for (int i = 0; i < stuArr.Length; i++)
{
if (stuArr[i].ID.Equals(500210003))
{
Console.WriteLine($"學號500210003的學生姓名為{stuArr[i].Name},性別為{stuArr[i].Sexual}");
break;
}
}
}
在同專案下自定義類別Student
class Student
{
public int ID { get; set; }
public string Name { get; set; }
public char Sexual { get; set; }
public Student(int id, string name, char sex)
{
this.ID = id;
this.Name = name;
this.Sexual = sex;
}
}
輸出結果:
學號500210003的學生姓名為Tim,性別為M
但是在C#中有另一個物件容器Dictionary,它就可以使用對應的Key與Value,在不使用迴圈的狀況下就找到值。
接下來,來看看以此例Dictionary是如何一次命中結果的吧!
static void Main(string[] args)
{
//先將5個學生物件新增至stuDic容器裡
Dictionary<int, Student> stuDic = new Dictionary<int, Student>()
{
{ 500210001, new Student("Lucy", 'F') },
{ 500210005, new Student("Yuta", 'M') },
{ 500210002, new Student("Pei", 'F') },
{ 500210003, new Student("Tim", 'M') },
{ 500210004, new Student("Jack", 'M') }
};
//將Key當作index放入stuDic[],傳回的Value賦值給result
Student result = stuDic[500210003];//比對Key後,傳回Value
Console.WriteLine(result.Name);
Console.WriteLine(result.Sexual);
}
在同專案下自定義類別Student
class Student
{
public string Name { get; set; }
public char Sexual { get; set; }
public Student( string name, char sex)
{
this.Name = name;
this.Sexual = sex;
}
}
輸出結果:
Tim
M
現在,我們都知道使用Dictionary好處了:
只要我們查字典的時候,提供與值(Value)相對應的關鍵字(Key)給字典,就能在最短的時間內得到結果!
在為Dictionary容器新增Key, Value時,有幾點要注意:
- Key不能重複
練習時剛好出錯,Key重複,會輸出結果:
System.ArgumentException: 已經加入含有相同索引鍵的項目。 - 不同的Key,Value可以重複
- Key與Value的資料型別可以不同
結論:
簡單來說,若我們得到的資訊有A搭配B的感覺,或是A對應到B的感覺,我們就可以使用Dictionary來查資料,
我現在就能想像到:眼前有一個龐大資料量的資料庫 - 關於產品info,假設我可以以Product item為關鍵字,去查詢價格、尺寸、數量、製造商等等。
對於這個新知識還不那麼熟悉,打鐵趁熱,下篇將以WindowsFormsApp來好好為大家示範如何使用Dictionary。
那麼,下篇見!
如有敘述錯誤,還請不吝嗇留言指教,thanks!