【问题标题】:Collection requiring two keys to a unique value集合需要两个唯一值的键
【发布时间】:2012-04-28 03:41:35
【问题描述】:

我想知道是否有人知道一种存储数据的好方法,以便使用两个键对其进行索引。基本上,我需要一个表格(顶行是 key1,左列是 key2,字母是从索引返回的值):

[ ] [1] [2] [3] [4]
[1] [A] [B] [C] [D]
[2] [B] [E] [F] [G]
[3] [C] [F] [H] [I]
[4] [D] [G] [I] [J]

我可以很容易地将它实现为一个多维数组,但是由于一半的表总是相同的,它似乎是多余的。到目前为止,我能想出的最佳解决方案涉及二维列表,第二维是可变长度,同时强制两个键中较大或较小的键首先被索引。这会将表格变成:

[ ] [1] [2] [3] [4]
[1] [A]
[2] [B] [E]
[3] [C] [F] [H]
[4] [D] [G] [I] [J]

有人有更好的想法吗?

编辑:我可能自己想出了一个解决方案。见 cmets。

【问题讨论】:

  • 您的描述不清楚。我不知道第一张图片(带有 A、B、C 等)应该传达什么。也许不用画图,你可以用英语来描述你想要存储什么,以及存储的数据与键的关系。
  • 其实我想我可能只是想通了,虽然我没有测试过。我只需要使用带有键的字典作为自定义结构,其中包含用于索引的两个整数值。我还需要覆盖结构的等号运算符,以匹配顺序与键值无关的事实。我现在打算走这条路线,让我知道你对此的看法。谢谢!
  • 这正是我想出的。

标签: c# collections


【解决方案1】:

我推荐:

Dictionary<Tuple<int, int>, char>

除非你的桌子很大。

【讨论】:

  • +1 令人失望的是,Tuple 在计算 GetHashCode 的值类型时使用了装箱,因此它作为字典键的使用不是很理想。
【解决方案2】:

如果您运行的是 .NET 4,您应该查看 Tuple 类。

IDictionary&lt;Tuple&lt;K1, K2&gt;, V&gt; - 这是表示 2 键字典的正确方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    • 2023-01-08
    • 1970-01-01
    相关资源
    最近更新 更多