Ruby枚举方法对Geokit对象之间的距离求和最有意义



我使用Geokit来计算两个位置对象之间的距离。http://geokit.rubyforge.org/

我的问题是,如果我有一个位置阵列,那么通过它们来计算总行程的最佳算法是什么?起初,我认为Enumerable#inject是一种方法,它传递N-1个位置对象之间的距离备忘录,但随后就无法存储您已经在实际数组中检查的位置对象的状态。

这需要有数组的大小,我们当前所在的索引,以及注入的行为。理想情况下,你可以做一些类似的事情:

locations = [Geokit::LatLng, Geokit::LatLng, ...]
locations.inject(0) do |memo, location|
  memo += location.distance_from(previous_location)
end 

不过,在这种情况下,previous_location是未定义的。

想法?

下面是一个非常简单的示例,说明您想要实现的目标。我使用正则数和绝对值作为距离度量,只是为了使迭代更清晰。

arr = [1, 2, 3, 4]
arr.each_cons(2).collect {|a| (a[1]-a[0]).abs }.reduce(:+)
=> 3
  1. Each_cons(2)取每2个连续元素,在这种情况下,生成[1,2]、[2,3]和[3,4]
  2. Collect是将每对映射到距离度量的映射操作
  3. Reduce只是将它们相加

相关内容

  • 没有找到相关文章

最新更新