【发布时间】:2013-10-21 11:19:20
【问题描述】:
我有一个具有以下定义的字典。
Dictionary<int[], int> D = new Dictionary<int[], int>();
其中键是一个 3 元素数组。我以此为例来简化我的场景。 (在我自己的代码中,Key 是一个复杂的类对象,其中包含一个包含 3-7 个元素的 List。)
int[] key;
key = new int[] { 1, 1, 1 };
D.Add(key, 1);
key = new int[] { 1, 1, 2 };
D.Add(key, 2);
key = new int[] { 1, 1, 3 };
D.Add(key, 3);
key = new int[] { 1, 2, 4 };
D.Add(key, 4);
key = new int[] { 2, 1, 1 };
D.Add(key, 5);
key = new int[] { 2, 5, 1 };
D.Add(key, 6);
我想要的是有一种方法来减少键的数量,即。而不是拥有三个元素的数组,我想要一个 2 元素数组作为键,并将所有多余的值合并为一个值,以便生成的 KeyValue 对应如下所示。 (减少键的第一个索引)
{1 1, 6} //two instances of matching key of {1 1} resulted the value to have 1+5 =6
{1 2, 2}
{1 3, 3}
{2 4, 4}
{5 1, 6}
【问题讨论】:
-
为什么是
1+5而不是1+2+3?为什么是1 2, 2而不是1 2, 4?2 4和5 1键是从哪里来的?这对我来说没有任何意义。 -
我已从密钥列表中取出第一列。这给我留下了 KeyCollection 的第二列和第三列。如果我只从这两列中获取唯一对,我只会得到我发布的 5 个键,并且在这 5 个键中,只有 {1 1} 在我的原始字典的第一个和第五个元素有多个实例,值分别为 1 和 5。因此,当我希望字典合并时,这两个值应该聚合给我 1+5=6。
标签: c# linq collections dictionary key