所以我最近一直在讨论C#,所有的Generic Collections让我有些困惑.假设我想表示一个数据结构,其中树的头是一个键值对,然后在它下面有一个可选的键值对列表(但没有比这些更多的级别).这适合吗?
public class TokenTree { public TokenTree() { /* I must admit to not fully understanding this, * I got it from msdn. As far as I can tell, IDictionary is an * interface, and Dictionary is the default implementation of * that interface, right? */ SubPairs = new Dictionary(); } public string Key; public string Value; public IDictionary SubPairs; }
传递数据只是一个简单的分流.
有一个名为KeyValuePair的实际数据类型,就像这样使用
KeyValuePairmyKeyValuePair = new KeyValuePair ("defaultkey", "defaultvalue");
你可以做的一件事就是直接使用Dictionary对象,然后用你自己的修改来扩展它:
public class TokenTree : Dictionary{ public IDictionary SubPairs; }
这使您无需为密钥强制执行IDictionary规则(例如,密钥唯一性等).
并且你明白了构造函数的概念:)
我认为你可能会追求的(作为你的问题的字面实现)是:
public class TokenTree { public TokenTree() { tree = new Dictionary>(); } IDictionary > tree; }
你确实在你的问题中说了一个关键值的"列表",所以你可能想要用以下内容交换内部IDictionary
:
IList>
有一个KeyValuePair内置类型.事实上,这是IDictionary在您迭代时可以访问的内容.
此外,这种结构几乎不是一棵树,找到一个更有代表性的名字可能是一个很好的锻炼.