我们可以按插入顺序检索Dictionary <a,b>元素吗?</a,b>

时间:2011-02-26 04:26:02

标签: c#

我们如何按照插入顺序检索Dictionary<A,B>个元素?如果字典不支持这个,那么我应该使用哪个对象给出了字典的行为,但也允许我按插入顺序获取元素。

提前致谢:)

3 个答案:

答案 0 :(得分:3)

无法保证您可以按顺序从Dictionary<TKey, TValue>检索元素。如果这是您想要的行为,只需将其封装到一个类中:

class DictionaryWithKeysOrderedByInsertion<TKey, TValue> : IEnumerable<KeyValuePair<TKey, TValue>> {
    private readonly List<TKey> keys = new List<TKey>();
    private readonly Dictionary<TKey, TValue> dictionary = new Dictionary<TKey, TValue>();

    public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator() {
        foreach(var key in keys) { 
            yield return new KeyValuePair(key, dictionary[key]));
        }
    }

    // etc.
 }

答案 1 :(得分:2)

字典是无序的,如果您希望它们按插入顺序返回,您可能需要考虑通用Queue

答案 2 :(得分:2)

不,字典没有这样的功能。

你可以

  1. 使用2个结构并同时插入两个结构 - List / LinkedList来存储序列和字典以提供快速查找。
  2. 您可以向存储在词典中的条目添加有关插入时间的信息。