寫程式時需要一個嵌套Dictionary類型,於是寫了個非常簡單的類型,叫他NDictionary類型。定義成員有:
既然是嵌套Dictionary,那麼他的鍵可以是任意長度的。注意雖然NDictionary是一個字典,但是無法繼承IDictionary<TKey, TValue>,因為他的每個值的鍵的長度是不固定的。所以NDictionary類型只執行IEnumerable<NKeyValuePair<TKey, TValue>>類型。這個NKeyValuePair<TKey, TValue>類型和BCL中的KeyValuePair<TKey, TValue>類似,它是專門為NDictionary寫的,因為他有自己的Keys屬性,同時ToString方法也被正確改寫從而返回所有鍵的路徑。
NDictionary類型使用起來很方便,直接看代碼:
//建立類型
//支援IEqualityComparer<TKey> comparer
var ndic = new NDictionary<string, int>();
Console.WriteLine("==值的添加和擷取");
var keys1 = new string[] { "group1", "subgroup1", "mgen" };
var keys2 = new string[] { "group2" };
//從索引器中設定值(也可以調用GetValue方法)
ndic[keys1] = 1;
ndic[keys2] = 2;
ndic[keys2] = 123;
//從索引器中擷取值(也可以調用SetValue方法)
Console.WriteLine(ndic[keys1]);
//使用TryGetValue(同時也有ContainsKey方法)
int value;
if (ndic.TryGetValue(keys2, out value))
Console.WriteLine(value);
Console.WriteLine("==枚舉成員");
//NDictionary執行IEnumerable<TValue>
foreach (var i in ndic)
Console.WriteLine(i);
Console.WriteLine("==訪問內部資料");
//通過SubDictionaries或者SubEntities屬性訪問內部資料
foreach (var pair in ndic.SubDictionaries)
Console.WriteLine("路徑:{0}", String.Join(".", pair.Value.Path));
Console.WriteLine("==刪除鍵");
ndic.Remove(keys2);
Console.WriteLine("==再次枚舉成員");
foreach (var i in ndic)
Console.WriteLine(i);
輸出:
==值的添加和擷取
1
123
==枚舉成員
[group2] [123]
[group1.subgroup1.mgen] [1]
==訪問內部資料
路徑:group1
==刪除鍵
==再次枚舉成員
[group1.subgroup1.mgen] [1]
原始碼下載
下載頁面
注意:連結是微軟SkyDrive頁面,下載時請用瀏覽器直接下載,用某些下載工具可能無法下載
檔案類型:.cs檔案