当重复键和值时,应采用哪些涉及键和值对的结构?
情境: 我正在以这种方式在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>[]
还是其他什么?
答案 0 :(得分:3)
就个人而言,我只是坚持使用Dictionary<TKey, List<TValue>>
,但是如果你想要一个更好的界面,你可能想为自己编写自己的MultiMap
包装类。
当然,在任何情况下都不能使用ToDictionary
,因为它在内部使用现有的唯一键字典,但您可以编写自己的ToMultiMap
扩展方法。
答案 1 :(得分:0)
现在应该在这种情况下采用什么结构?
在文档中很明显和清楚地说明 - 不是一个字典。
列表,数组等等,完全取决于您的使用模式,而不是创建模式。因为你没有说你如何使用它 - 好吧 - 这个问题无法回答。
或者,您可以使用带有项目列表的词典 - 键是唯一的,指向值列表。同样,这取决于 - 您现在可能会猜到 - 关于您如何使用数据。