2010-04-19 39 views
13

什麼是最好的C#數據結構使用一個鍵,並有兩個值拉出?C#字典,2值

本質上我需要一個Dictionary<string, string, string>。有沒有這樣的事情?

回答

21

如果您使用.NET 4,你可以使用

Dictionary<string, Tuple<string, string>> 

如果你沒有,你可以創建自己的Tuple類型的工作方式相同,:)

另外,如果你只需要在一個地方創建你自己的類型,使用適當的名字整齊地封裝兩個字符串。例如:

public sealed class NameAndAddress 
{ 
    private readonly string name; 
    public string Name { get { return name; } } 

    private readonly string address; 
    public string Address { get { return address; } } 

    public NameAndAddress(string name, string address) 
    { 
     this.name = name; 
     this.address = address; 
    } 
} 

然後你可以使用:

Dictionary<string, NameAndAddress> 

這使得它非常清楚這是怎麼回事存儲。

如果你願意,你可以實現平等等。我個人希望看到這樣的事情變得更容易 - 匿名類型做到這一點,但你不能說出他們...

+2

Ooh tuple ....! – 2010-04-19 14:36:26

+0

密封,只讀,屬性,... - 不要混淆他;) – Danvil 2010-04-19 14:41:27

+1

密封,只讀,屬性,... - 我見過的最簡潔不變的例子之一。但是重寫Equals和GetHashCode呢? :) – 2010-04-19 15:02:54

6
class A { 
    public string X, Y; 
} 

Dictionary<string, A> data; 
3

創建一個結構包含您的值,然後使用

Dictionary<string, MyStruct> dict = new Dictionary<string, MyStruct>(); 
0

您可以使用KeyValuePairs

Dictionary<string,KeyValuePair<string,string>> 
+3

我不喜歡這個想法,因爲儘管它會*做你想做的事情,這是誤導 - 爲什麼第二個字符串被視爲第三個字符串的關鍵字? – 2010-04-19 14:37:32

+0

是的,你是對的,但在某些情況下,這是一個快速,並不是很難看的解決方案... 無論如何一個自定義的實現,或使用Tuple可能是最好的一般(但Tuple只在.net 4.0 ) – digEmAll 2010-04-19 14:48:17

+0

-1這是非常誤導。在什麼樣的關鍵字和KeyValuePair 中應該是什麼值沒有邏輯 – 2010-04-19 15:27:06

0

是的,有exactly that的字典。你可以將你的兩個值存儲在一個類或一個結構中。或者你想要別的東西嗎?

0

創建一個類來保存您的價值並使其成爲一個詞典。如果該類僅用於包含類的上下文(例如,它用於爲類屬性提供數據結構),則可以使您的類成爲私有嵌套類。