如何在LINQ中按列表合并

时间:2016-08-01 10:33:26

标签: c# .net linq

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

KeyValue对下面的列表

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)

1 个答案:

答案 0 :(得分:7)

在您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()

其他//Array for holding the vertices of a hexagon float [ ] Vertices = { // Vertex 0 -0.5f , 1.0f , 0.0f , // Vertex 1 -1.0f , 0.0f , 0.0f , // Vertex 2 -0.5f , -1.0f , 0.0f , // Vertex 3 0.5f , -1.0f , 0.0f , // Vertex 4 1.0f , 0.0f , 0.0f , // Vertex 5 0.5f , 1.0f , 0.0f , // Center Vertex ( 6 ) 0.0f , 0.0f , 0.0f }; 只是为了便于调试