我有一个名为data的变量,定义为:
{"xxx", "ccc", "wpr", "qpr"}
{"xxx", "abd", "xyz", "qpr"}
{"yyy", "ddd", "kgo", "abc"}
如您所见,键是一个字符串数组,值是另一个内部字典。每个键都可以包含以下项目:
{{1}}
如何使用LINQ获取此密钥的不同第一项?例如,在上面的例子中,我应该得到xxx和yyy。其中两个键有xxx,另一个键有yyy作为第一项。
此Dictionary中键的字符串数组用作行标识符。此词典包含的数据是导出到Excel的数据。我继承了这个应用程序,所以我不能重新定义这个变量。因此,该密钥用于在Excel中标识和执行总计分组。这就是原始开发人员这样做的原因。
字符串键的长度始终相同。
答案 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
也处理数组为空的情况。