【问题标题】:Data structure that supports access via index as well as key支持通过索引和键访问的数据结构
【发布时间】:2013-05-01 11:07:03
【问题描述】:

字典支持通过键访问元素。 List 支持通过索引访问。 有没有同时支持key和index访问的数据结构?

Dictionary<string, string> d = new Dictionary<string, string>();
d.Add("abc", "def");
d.Add("ghi", "ghi");
d.Add("abcd", "abcd");
d.Add("how", "howis");
foreach (KeyValuePair<string, string> kv in d)
   Console.WriteLine(kv.Key);

输出是

abc
ghi 
abcd 
how

因此,项目的出现顺序与添加时的顺序相同。这是否意味着字典按顺序维护项目?如果是,我们可以通过索引访问它们吗?如果没有,是否有任何此类可用的集合支持按索引和键访问元素?

【问题讨论】:

  • 字典中元素的顺序是不确定的,你不应该依赖它。

标签: c# data-structures dictionary indexing key


【解决方案1】:

我认为 OrderedDictionary NameValueCollection 是你要找的。​​p>

【讨论】:

  • OrderedDictionary 将键和值都作为字符串。我们有通用版本吗?
  • 请阅读文档。 OrderedDictionary 将对象作为键和值。
  • 还是通用版本会更好。 :-)
  • 我不这么认为;我认为,您可以通过在其中包含List&lt;TKey&gt;Dictionary&lt;TKey, TValue&gt; 使类实现IList&lt;&gt;IDictionary&lt;,&gt; 来相当容易地推出自己的。 (但考虑一下,如果 TKeyint 会发生什么:两个索引都将是 int;您可能还需要 GetByKey(..)GetByIndex(..) 方法在需要时进行澄清。
  • ...或通过在泛型中包装私有OrderedDictionary
【解决方案2】:

字典中的值不一定是唯一的,因此是键查找。

字典中元素的顺序是不确定的,因此OrderedDictionary

【讨论】:

  • 如果字典中元素的顺序是不确定的,for-each/Enumerator 是如何按照它们被添加的顺序获取它们的?
猜你喜欢
  • 2011-12-05
  • 1970-01-01
  • 2010-09-05
  • 1970-01-01
  • 1970-01-01
  • 2016-10-11
  • 1970-01-01
  • 2013-02-22
  • 2019-01-11
相关资源
最近更新 更多