当Key和Value重复时,应该采用什么结构涉及Key和Value对?

时间:2012-06-05 07:57:57

标签: c# dictionary key-value

当重复键和值时,应采用哪些涉及键和值对的结构?

情境: 我正在以这种方式在WPF中生成匿名类型

var result = Enum.GetValues(typeof(Key)).Cast<Key>()
                 .Select(x => new {Key = x, Value = (int)x});

我尝试使用

将其转换为字典
.ToDictionary(Key => Key, Value => (int)Value);

.ToDictionary(Key => (int)Key, Value => Value);

但在这两种情况下,它都会例外已经添加了具有相同键的项目。表示在这两种情况下都会重复键。

现在应该在这种情况下采用什么结构?我应该去KeyValuepair<int, Key>[]还是其他什么?

2 个答案:

答案 0 :(得分:3)

就个人而言,我只是坚持使用Dictionary<TKey, List<TValue>>,但是如果你想要一个更好的界面,你可能想为自己编写自己的MultiMap包装类。

当然,在任何情况下都不能使用ToDictionary,因为它在内部使用现有的唯一键字典,但您可以编写自己的ToMultiMap扩展方法。

答案 1 :(得分:0)

  

现在应该在这种情况下采用什么结构?

在文档中很明显和清楚地说明 - 不是一个字典。

列表,数组等等,完全取决于您的使用模式,而不是创建模式。因为你没有说你如何使用它 - 好吧 - 这个问题无法回答。

或者,您可以使用带有项目列表的词典 - 键是唯一的,指向值列表。同样,这取决于 - 您现在可能会猜到 - 关于您如何使用数据。