Dictionary<string, string>是一個泛型,什麼是泛型?使用泛型下麵是用泛型來重寫上面的棧,用一個通用的數據類型T來作為一個占位符,等待在實例化時用一個實際的類型來代替。讓我們來看看泛型的威力: public class Stack<T> { private T[] m_item ...
Dictionary<string, string>是一個泛型,什麼是泛型?
使用泛型
下麵是用泛型來重寫上面的棧,用一個通用的數據類型T來作為一個占位符,等待在實例化時用一個實際的類型來代替。讓我們來看看泛型的威力:
public class Stack<T> { private T[] m_item; public T Pop(){...} public void Push(T item){...} public Stack(int i) { this.m_item = new T[i]; } }
這個類和object實現的類有截然不同的區別:
1. 他是類型安全的。實例化了int類型的棧,就不能處理string類型的數據,其他數據類型也一樣。
2. 無需裝箱和折箱。這個類在實例化時,按照所傳入的數據類型生成本地代碼,本地代碼數據類型已確定,所以無需裝箱和折箱。
3. 無需類型轉換。
他的結構是這樣的:Dictionary<[key], [value]>
他的特點是存入對象是需要與[key]值一一對應的存入該泛型
通過某一個一定的[key]去找到對應的值
舉個例子:
//實例化對象 Dictionary<int, string> dic = new Dictionary<int, string>(); //對象打點添加 dic.Add(1, "one"); dic.Add(2, "two"); dic.Add(3, "one"); //提取元素的方法 string a = dic[1]; string b = dic[2]; string c = dic[3];
//通過Key查找元素 if(myDictionary.ContainsKey(1)) { Console.WriteLine("Key:{0},Value:{1}","1", myDictionary[1]); } //通過KeyValuePair遍歷元素 foreach(KeyValuePair<int,string>kvp in myDictionary) { Console.WriteLine("Key = {0}, Value = {1}",kvp.Key, kvp.Value); } //僅遍歷鍵 Keys 屬性 Dictionary<int,string>.KeyCollection keyCol=myDictionary.Keys; foreach(intkeyinkeyCol) { Console.WriteLine("Key = {0}", key); } //僅遍歷值 Valus屬性 Dictionary<int,string>.ValueCollection valueCol=myDictionary.Values; foreach(stringvalueinvalueCol) { Console.WriteLine("Value = {0}", value); } //通過Remove方法移除指定的鍵值 myDictionary.Remove(1); if(myDictionary.ContainsKey(1)) { Console.WriteLine("Key:{0},Value:{1}","1", myDictionary[1]); } else { Console.WriteLine("不存在 Key : 1"); }
其它常見屬性和方法的說明:
Comparer: 獲取用於確定字典中的鍵是否相等的 IEqualityComparer。 Count: 獲取包含在 Dictionary中的鍵/值對的數目。 Item: 獲取或設置與指定的鍵相關聯的值。 Keys: 獲取包含 Dictionary中的鍵的集合。 Values: 獲取包含 Dictionary中的值的集合。 Add: 將指定的鍵和值添加到字典中。 Clear: 從 Dictionary中移除所有的鍵和值。 ContainsKey: 確定 Dictionary是否包含指定的鍵。 ContainsValue: 確定 Dictionary是否包含特定值。 GetEnumerator: 返回迴圈訪問 Dictionary的枚舉數。 GetType: 獲取當前實例的 Type。 (從 Object 繼承。) Remove: 從 Dictionary中移除所指定的鍵的值。 ToString: 返回表示當前 Object的 String。 (從 Object 繼承。) TryGetValue: 獲取與指定的鍵相關聯的值。
Dictionary的基本用法。假如
需求:現在要導入一批數據,這些數據中有一個稱為公司的欄位是我們資料庫里已經存在了的,目前我們需要把每個公司名字轉為ID後才存入資料庫。
分析:每導一筆記錄的時候,就把要把公司的名字轉為公司的ID,這個不應該每次都查詢一下資料庫的,因為這太耗資料庫的性能了。
解決方案:在業務層里先把所有的公司名稱及相應的公司ID一次性讀取出來,然後存放到一個Key和Value的鍵值對里,然後實現只要把一個公司的名字傳進去,就可以得到此公司相應的公司ID,就像查字典一樣。對,我們可以使用字典Dictionary操作這些數據。
示例:SetKeyValue()方法相應於從資料庫里讀取到了公司信息。
/// <summary> /// 定義Key為string類型,Value為int類型的一個Dictionary /// </summary> /// <returns></returns> protected Dictionary<string, int> SetKeyValue() { Dictionary<string, int> dic = new Dictionary<string, int>(); dic.Add("公司1", 1); dic.Add("公司2", 2); dic.Add("公司3", 3); dic.Add("公司4", 4); return dic; } /// <summary> /// 得到根據指定的Key行到Value /// </summary> protected void GetKeyValue() { Dictionary<string, int> myDictionary = SetKeyValue(); //測試得到公司2的值 int directorValue = myDictionary["公司2"]; Response.Write("公司2的value是:" + directorValue.ToString()); }