1

我正在使用 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 是未定义的。

想法?

4

1 回答 1

2

这是您要完成的任务的一个非常简化的示例。我使用常规数字和绝对值作为距离度量,只是为了使迭代更清晰。

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. 收集是将每对映射到距离度量的映射操作。
  3. 减少只是将它们加在一起。
于 2012-09-13T01:08:16.993 回答