我想知道什么是将IEnumerable<HashSet<T>>
转换为具有所有元素的单个Hashset<T>
的最有效的方法(编辑:最快)。
示例情况:
提供:
class Rectangle
{
public HashSet<Point> PointSet { get; set; }
}
有效实施:
HashSet<Point> ExtractUniquePoints(IEnumerable<Rectangle> rectangles) {}
低效的解决方案:
HashSet<Point> ExtractUniquePoints(IEnumerable<Rectangle> rectangles)
{
HashSet<Point> uniquePoints = new HashSet<Point>();
foreach (Rectangle rectangle in rectangles)
{
foreach (Point point in rectangle.PointSet)
{
uniquePoints.Add(point);
}
}
return uniquePoints;
}
谢谢!
答案 0 :(得分:2)
我认为不一定有一种更快的方式来做您正在做的事情(至少不是使用HashSets),但是以下是一种更简短的方法:
HashSet<Point> ExtractUniquePoints(IEnumerable<Rectangle> rectangles)
{
return new HashSet<Point>(rectangles.SelectMany(r => r.PointSet));
}
或者,如果您使用的是.NET Core,则只需:
HashSet<Point> ExtractUniquePoints(IEnumerable<Rectangle> rectangles)
{
return rectangles.SelectMany(r => r.PointSet).ToHashSet();
}