我經常需要一個鍵到多個字母字典,但在C#中,他們中的大多數是像Dictionary和Hashtable這樣的兩個維度。在C#中的多值字典的一個關鍵?
我想是這樣的:
var d = new Dictionary<key-dt,value1-dt,value2-dt,value3-dt,value4-dt>();
DT內<>表示數據類型。任何人都有這個想法?
我經常需要一個鍵到多個字母字典,但在C#中,他們中的大多數是像Dictionary和Hashtable這樣的兩個維度。在C#中的多值字典的一個關鍵?
我想是這樣的:
var d = new Dictionary<key-dt,value1-dt,value2-dt,value3-dt,value4-dt>();
DT內<>表示數據類型。任何人都有這個想法?
字典是一個鍵值對,其中值取決於鍵。鑰匙都是獨一無二的。
現在,如果你想有一個Dictionary
1周的KeyType和多值類型,你有幾種選擇:
第一種是使用一個Tuple
var dict = new Dictionary<KeyType, Tuple<string, string, bool, int>>()
另一種是使用(與C#4.0以上):
var dict = new Dictionary<KeyType, dynamic>()
System.Dynamic.ExpandoObject
可以具有任何類型的值。
using System;
using System.Linq;
using System.Collections.Generic;
public class Test {
public static void Main(string[] args) {
dynamic d1 = new System.Dynamic.ExpandoObject();
var dict = new Dictionary<int, dynamic>();
dict[1] = d1;
dict[1].FooBar = "Aniket";
Console.WriteLine(dict[1].FooBar);
dict[1].FooBar = new {s1="Hello", s2="World", s3=10};
Console.WriteLine(dict[1].FooBar.s1);
Console.WriteLine(dict[1].FooBar.s3);
}
}
請問你能解釋一下這個'dict [1] = d1; dict [1] .FooBar =「Aniket」;'?因爲我理解'dic [1] .FooBar = Aniket'是字典的關鍵,但在這種情況下'FooBar'是什麼意思? – vladimir 2017-10-12 13:48:21
@vladimir在這種情況下'.FooBar'意味着它可以是任何東西。你可以使用相同的代碼並用'.vladimir'替換'.FooBar',它仍然可以工作。我在運行時動態地在'dict [1]'(它指向'd1')中創建了一個名爲'FooBar'的屬性 – 2017-10-12 16:56:24
描述適當的關鍵字段和適當的值域與類。並使用這些類型的字典。
var dictionary = new Dictionary<TheKeyType, TheValuesType>();
注意:如果你有作爲的關鍵多個值,你會定義一個類來封裝這些值,並提供GetHashCode的適當的覆蓋和equals以便詞典能認識到自己的平等。
這樣做的缺點是,你可以利用元組,但是你想限制這種模式,因爲元組是非自描述的。
var dictionary = new Dictionary<Tuple<Key1Type, Key2Type, Etc>, Tuple<Value1Type, Value2Type, Etc>>();
而不是使用一個元組,這是一個非常有效的解決方案,我會建議創建自己的類作爲鍵和/或值。
您可能會意識到元組將變成難以閱讀的代碼。
注意他必須手動實現Equals()和GetHashCode()。 – 2013-02-20 18:28:40
@SystemDown:感謝您指出。其中一個決定權衡 – 2013-02-20 18:37:09
@SystemDown只有在自定義類是關鍵時纔是如此,如果這是不需要的價值。 – Servy 2013-02-20 18:37:39
我假設你想要一個鍵值對,值是一個列表?這是有效的:'var d = new Dictionary>();'或者任何你想要存儲的列表。 –
2013-02-20 18:23:37
你需要解釋一下你想要更好一點。目前的解釋並沒有說明什麼。舉一個你如何使用你設想的字典的例子。 – Pete 2013-02-20 18:23:48
字典需要2個參數,所以你最終試圖在這裏實現什麼? – MethodMan 2013-02-20 18:23:57