【问题标题】:Minimal values of X and Y coordinates in PointCollection (C#)PointCollection (C#) 中 X 和 Y 坐标的最小值
【发布时间】:2011-05-13 19:37:54
【问题描述】:

假设我有一个积分集合 (PointCollection)。 我想要做的是找到这些点之间 X 和 Y 坐标的最小值。 显然,可以遍历集合并逐步检查坐标。

我想知道是否有更快更有效的解决方案。

你有什么想法吗?

谢谢

【问题讨论】:

  • 所以你想要两分? X 最低的一个和 Y 最低的一个,还是 X 和 Y 组合最低的一个点?
  • 除非它们已经排序,否则没有什么比检查它们更快的了

标签: c# coordinates max point minimum


【解决方案1】:

要分别获取最低的 x 和 y 位置,请使用

var lowestX = pointCollection.Min( p => p.X );
var lowestY = pointCollection.Min( p => p.Y );

如果您想要组合 X 和 Y 位置最低的那个,请使用

var lowest = pointCollection.Min( p => p.X + p.Y );

【讨论】:

    【解决方案2】:

    打字更快?也许:

    var xMin = points.Min(p => p.X);
    var yMin = points.Min(p => p.Y);
    

    但这会执行比单个 foreach 循环慢:

    bool first = true;
    foreach(var point in points) {
        if(first) {
            xMin = point.X;
            yMin = point.Y;
            first = false;
        } else {
            if(point.X < xMin) xMin = point.X;
            if(point.Y < yMin) yMin = point.Y;
        }
    }
    

    【讨论】:

    • 我正在寻找最快的解决方案。为什么你认为第一个会慢一些?
    • 这段代码也检查了如果每次都不需要,只需将 xmin 和 ymin 分配给 int.MaxValue,然后使用 foreach 并且主体只是 else 块
    • @HPT - 好的,这是一个很好的补充。 @Jamie - 因为 a:它循环两次而不是一次,并且 b:LINQ 使用最小公分母方法 - 它不能使用为集合类型定义的任何自定义迭代器,并且必须执行额外的委托调用。
    猜你喜欢
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    • 2020-03-20
    • 1970-01-01
    • 2020-03-27
    相关资源
    最近更新 更多