2009-01-11 211 views
0

我想在另一个Dictionary中使用Dictionary作为TKey。类似于Python的东西。我试过这个,但它给我错误。使用字典作为其他字典中的关键字

Dictionary<Dictionary<string, string>, int> dict = new Dictionary<Dictionary<string, string>, int>(); 
Dictionary<string, string> dict2 = new Dictionary<string, string>(); 
dict2["abc"] = "def"; 
dict[dict["abc"] = 20; 
+1

您的最后一行有多个错误。如果其中一个引用应该是dict2,则可以参考字典两次。 (重要的一课:清楚地说明你的变量!)你有一个无与伦比的开放大括号。 – abelenky 2009-01-11 19:06:44

回答

10

是它给你什么错误?难道抱怨你丢失的支架上的4行?

4号线看起来应该是:

dict[dict["abc"]] = 20; 

不过,你可能是说这个,因为“ABC”是不是字典的关键:

dict[dict2["abc"]] = 20; 

dict2["abc"]string,当钥匙的字典应该是Dictionary<string, string>

但是,让我们重新检查一下您的原始目标,然后再沿着这条路走下去。你不应该首先使用可变类型作为字典键。

这可能是你正在寻找的代码:

Dictionary<string, int> dict = new Dictionary<string, int>(); 
Dictionary<string, string> dict2 = new Dictionary<string, string>(); 
dict2["abc"] = "def"; 
dict[dict2["abc"]] = 20; 

但很难说是肯定的。

4

这是因为 “字典[” ABC“]不是字典,但 ”串“

正确的,你问的是:。

Dictionary<Dictionary<string, string>, int> dict = new Dictionary<Dictionary<string, string>, int>(); 
Dictionary<string, string> dict2 = new Dictionary<string, string>(); 
dict2["abc"] = "def"; 
dict[dict2] = 20; 

,但我不当然,这是你真的想/需要。

+0

我只是自己输入相同的.. +1 :) – 2009-01-11 18:36:13

+0

好吧,但我怎么从内部字典中获得特定的键,值对。 我不想为外字典中的每个值创建内部字典。 – kamilw 2009-01-11 18:45:42

6

只是想把它放在那里,我经常发现,处理像你这样复杂的词典描述它更好地使用真实姓名,而不是试图让代码的读者排除它。

根据个人喜好,您可以通过两种方法之一来完成此操作。可以使用using语句来创建编译器别名。请注意,您必须使用完全限定类型名称,因为这是一个编译器别名。

using ComplexKey = System.Collections.Generic.Dictionary<String, String>; 
using ComplexType = System.Collections.Generic.Dictionary< 
    System.Collections.Generic.Dictionary<String, String>, 
    String 
    >; 

或者你可以去完整的类型的方式,实际上创建一个继承自Dictionary的类。

class ComplexKey : Dictionary<String, String> { ... } 
class ComplexType : Dictionary<ComplexKey, String> { ... } 

这样做会使您和您的代码的读者更容易找出您正在做的事情。我的一般经验法则是,如果我创建一个通用泛型,那么现在是时候考虑建立一些头等公民来代表我的逻辑了。