将HashSet列表有效转换为单个HashSet

时间:2018-12-07 02:08:39

标签: c# algorithm hashset

我想知道什么是将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;
    }

谢谢!

1 个答案:

答案 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();
}