LINQ中如何合并分组列表

6

我的列表结构是:List<KeyValuePair<string,List<int>>>

以下是键值对的列表

Key       Values
[PageA] [1, 3, 4] 
[PageA] [1, 3, 5] 
[PageA] [1, 3, 4, 5, 6]
[PageB] [1, 3, 4, 6] 
[PageC] [1, 3, 4] 
[PageC] [1, 3, 4, 5, 7]

问:如何将相同键的所有值合并,并同时删除重复项,就像下面这样。

[PageA] [1, 3, 4, 5, 6]
[PageB] [1, 3, 4, 6] 
[PageC] [1, 3, 4, 5, 7]

我正在尝试首先对它们进行分组,这样可以很好地对它们进行分组,但我无法将它们进一步合并为单个键。

var pages = pageData.GroupBy(p => p.Key)

@MurrayFoxcroft:你似乎没有理解问题的重点。问题的关键是需要将多个“页面A”条目中的值合并。请参见问题本身下方的示例输出。 - Chris
1个回答

13

在按照您的Key分组后,您应该使用SelectMany将来自不同记录的所有集合合并。这样做后,您可以调用Distinct

var result = pageData.GroupBy(item => item.Key)
                     .Select(group => new 
                     { 
                         Key = group.Key, 
                         Values = group.SelectMany(item => item.Value).Distinct().ToList() 
                     }).ToList();

额外的 .ToList() 只是为了方便调试


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接