【问题标题】:How do you store an Integer and Boolean key value pair in an un-ordered collection?如何在无序集合中存储整数和布尔键值对?
【发布时间】:2008-09-28 21:10:14
【问题描述】:

我需要在 .NET 中存储 (integer, boolean) 的键值对列表

当我使用字典时,它会重新排序。是否有一个内置的集合可以处理这个问题。

【问题讨论】:

  • 更重要的是,在恒定时间内通过键访问值,还是能够迭代插入顺序中的项目?
  • 实现没有理由不能同时使用哈希表和链表来提供这两个属性。 Java 有一个链接的哈希映射:java.sun.com/j2se/1.4.2/docs/api/java/util/LinkedHashMap.html
  • 当然没有理由,但他问的是内置方式。

标签: .net


【解决方案1】:
    List<KeyValuePair<int, bool>> l = 
                        new List<KeyValuePair<int, bool>>();
    l.Add(new KeyValuePair<int, bool>(1, false));

【讨论】:

    【解决方案2】:

    如果你想保留插入顺序,为什么不使用队列?

    http://msdn.microsoft.com/en-us/library/6tc79sx1(VS.71).aspx

    字典对元素重新排序以加快查找速度。保留插入顺序会破坏该目的...

    【讨论】:

      【解决方案3】:

      您可以创建一个 KeyValuePairs 列表:

      var myList = new List<KeyValuePair<int, bool>>();
      

      【讨论】:

        【解决方案4】:

        Ordered dictionary 允许按索引或键检索。

        【讨论】:

          【解决方案5】:

          OrderedDictionary 是要走的路。它提供 O(1) 检索和 O(n) 插入。更多详情see codeproject

          【讨论】:

            【解决方案6】:

            数组呢?

            KeyValuePair<int, bool>[] pairs
            

            当您想在集合初始化后添加对时,列表可能更有用。

            List<KeyValuePair<int, bool>> 
            

            【讨论】:

              【解决方案7】:

              字典应该对它们重新排序,地图本身没有顺序的概念。

              .Net 中有一个类支持该概念:

              SortedDictionary<Tkey, Tvalue>
              

              它要求 Tkey 类型实现 de IComparable 接口,以便它知道如何对项目进行排序。这样,当您返回键或值时,它们应该按照 IComparable 实现指定的顺序。对于整数当然是微不足道的:

              a < b
              

              【讨论】:

                猜你喜欢
                • 2014-04-26
                • 2012-10-15
                • 1970-01-01
                • 2014-08-24
                • 1970-01-01
                • 2019-03-14
                • 2019-02-10
                • 1970-01-01
                • 2016-01-16
                相关资源
                最近更新 更多