如何在Array对象上运行查询?

时间:2014-07-11 11:12:52

标签: arrays haxe

我经常发现自己试图计算点数组中的最近点,或精灵数组中最低的精灵等等。

例如:计算数组中的最低点:

var lowestPoint:Point;
var lowestY:Float= Math.POSITIVE_INFINITY;
for (point in points)
    if (point.y < lowestY)
    {
        lowestPoint= point;
        lowestY.y= point.y;
    }

那么,有没有更好的方法来计算呢?可能是一个图书馆?

1 个答案:

答案 0 :(得分:2)

问题是:你为什么经常这样写? 如果真正的问题是您不想一遍又一遍地重写相同的代码,请使用函数。

如果您只是想要一种更简单的方法来撰写本文,请尝试使用Lambda.fold,您可以阅读它的工作原理Here

这将找到分数的最低点。 请注意,它确实假设数组中至少有一个点。

var lowest = Lambda.fold(points, function(a, b) { return if (a.y < b.y) a else b; }, points[0])

使用Lambda.mapLambda.filterLambda.reduce的组合将为您提供强大的查询界面,但请记住,使用for循环实现您的函数将提供比使用Lambda.fold。

您可以通过执行以下操作来清理循环代码:

var lowestPoint:Point = points[0];
for (point in points)
  if (point.y < lowestPoint.y)
  {
    lowestPoint = point;
  }

(再次,这假设点中至少有一个点)