Arrays 在Ruby中,将散列的键与不同数组中的数组元素相关联

Arrays 在Ruby中,将散列的键与不同数组中的数组元素相关联,arrays,ruby,ruby-hash,Arrays,Ruby,Ruby Hash,我有一个hashcity:[坐标]如下: cities = { l1: [41.91372380139719,-87.72308349609375], l2: [42.092312110873536,-87.79449462890625], l3: [42.08008203350686,-87.73406982421875], l4: [41.86976539904969,-87.68325805664062], l5: [41.8861255478388,-87

我有一个hashcity:[坐标]如下:

cities = {
  l1:  [41.91372380139719,-87.72308349609375], 
  l2:  [42.092312110873536,-87.79449462890625],
  l3:  [42.08008203350686,-87.73406982421875],
  l4:  [41.86976539904969,-87.68325805664062],
  l5:  [41.8861255478388,-87.63381958007812],
  l6:  [41.8891926094646,-87.60635375976562],
  l7:  [41.91678953772886,-87.63107299804688],
  l8:  [41.92496411465408,-87.68051147460938],
  l9:  [41.87283324596932,-87.61734008789062],
  l10: [41.84828634806966,-87.61184692382812],
  l11: [41.86772008597142,-87.63931274414062],
  l12: [41.88510316124205,-87.60498046875],
  l13: [41.84930932360913,-87.62420654296875]
}
然后我计算第一个位置和其他位置之间的距离,如下面所述,然后将这些距离放入一个名为temp的数组中:

这段代码有效,我得到了一个距离数组。我的最终目标是输出距离第一个位置最近的位置1

例如:L7是距离L1最近的位置。由于temp数组中的元素与cities散列中的键没有关联,因此我不确定如何执行此操作。我只需要使用temp.min 获取最小距离,但这不会输出位置的名称

有办法吗

for i in 1..(cityarr.length-1) do
  temp.push([cityarr[i][0], distance([cityarr[0][1][0], cityarr[0][1][1]],
                                     [cityarr[i][1][0], cityarr[i][1][1]])])
end

temp.min_by { |dist| dist[1] }

这将为您提供距离最近的点。我想我们可以找到更好的方法。我相信有人会喜欢用其他方法来启发我们。

非常感谢。很有魅力,不客气。如果回答了您的问题,请接受答案。这样,您可以表示您的问题不一定需要更多的关注,并且答案与您的问题完全匹配。谢谢您让我知道您接受了答案。直到你提到它,我才知道它。因为循环在Ruby中通常是不受欢迎的,你应该强调这一点。还有其他更惯用的方法。@Dinukapera接受关于堆栈溢出的答案很重要,但并不急于这样做。慢慢来,等着看还有什么其他答案被贴出来。
for i in 1..(cityarr.length-1) do
  temp.push([cityarr[i][0], distance([cityarr[0][1][0], cityarr[0][1][1]],
                                     [cityarr[i][1][0], cityarr[i][1][1]])])
end

temp.min_by { |dist| dist[1] }