当Dictionary的键是字符串数组时,如何获得不同的键

时间:2015-04-29 14:57:16

标签: c# linq

我有一个名为data的变量,定义为:

{"xxx", "ccc", "wpr", "qpr"}
{"xxx", "abd", "xyz", "qpr"}
{"yyy", "ddd", "kgo", "abc"}

如您所见,键是一个字符串数组,值是另一个内部字典。每个键都可以包含以下项目:

{{1}}

如何使用LINQ获取此密钥的不同第一项?例如,在上面的例子中,我应该得到xxx和yyy。其中两个键有xxx,另一个键有yyy作为第一项。

此Dictionary中键的字符串数组用作行标识符。此词典包含的数据是导出到Excel的数据。我继承了这个应用程序,所以我不能重新定义这个变量。因此,该密钥用于在Excel中标识和执行总计分组。这就是原始开发人员这样做的原因。

字符串键的长度始终相同。

2 个答案:

答案 0 :(得分:3)

像...一样的东西。

var result=data.Keys.Select(k=>k[0]).Distinct();

答案 1 :(得分:0)

由于该类型不会覆盖String[] + Equals,因此在字典中使用GetHashCode作为关键字并不能按预期工作。如果您不想仅比较引用,则需要为字典构造函数设置自定义IEqualityComparer(string[])

除此之外,试试这个:

IEnumerable<string> firstColumnDistinct = data.Keys
   .Select(arr => arr.FirstOrDefault())
   .Distinct();

FirstOrDefault也处理数组为空的情况。