如何按Key合并IGrouping中的元素并转换为IEnumerable<Point>列表?
解决IGrouping转合并后的Point序列列表问题
你手里的IGrouping<TKey, List<Point>>(TKey为分组Key的实际类型),每个分组下包含多个List<Point>实例,要把每个分组内的所有列表合并成单个IEnumerable<Point>,最终得到这些合并结果的列表,用LINQ就能轻松实现:
推荐实现(简洁高效)
var result = grouping.Select(g => g.SelectMany(points => points)).ToList();
代码说明
grouping替换成你的IGrouping<TKey, List<Point>>集合变量名- 外层
Select遍历每个分组 - 内层
SelectMany会自动把当前分组里的所有List<Point>扁平化为一个连续的IEnumerable<Point>,等价于手动调用p1.Concat(p2)这类合并操作 - 最后
ToList()将结果转为List<IEnumerable<Point>>,完全匹配你想要的结构
备选写法(显式用Concat,性能稍差)
如果偏好显式合并的写法,也可以用Aggregate,但每次Concat都会生成新列表,性能不如SelectMany:
var result = grouping.Select(g => g.Aggregate((accumulated, nextList) => accumulated.Concat(nextList).ToList())).ToList();
内容的提问来源于stack exchange,提问作者Mikhail Eltsov
相关产品推荐
相关产品推荐

