我经常发现自己试图计算点数组中的最近点,或精灵数组中最低的精灵等等。
例如:计算数组中的最低点:
var lowestPoint:Point;
var lowestY:Float= Math.POSITIVE_INFINITY;
for (point in points)
if (point.y < lowestY)
{
lowestPoint= point;
lowestY.y= point.y;
}
那么,有没有更好的方法来计算呢?可能是一个图书馆?
答案 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.map
,Lambda.filter
和Lambda.reduce
的组合将为您提供强大的查询界面,但请记住,使用for循环实现您的函数将提供比使用Lambda.fold。
您可以通过执行以下操作来清理循环代码:
var lowestPoint:Point = points[0];
for (point in points)
if (point.y < lowestPoint.y)
{
lowestPoint = point;
}
(再次,这假设点中至少有一个点)