我想用两个值数组做一个哈希数组[关闭]。

问题描述 投票:0回答:1

我有两个数组。一个数组包含经度,另一个数组包含纬度。

我需要创建一个称为标记的哈希数组。每个标记将有一个关键的纬度和一个相应的值。它还将有一个关键的经度和一个对应的值。我如何从这两个数组中创建一个哈希数组。

我被卡住了,所以任何帮助都将非常感激。

我的代码如下

array_of_lon = [162.143815475374, 168.950878940823, 3.64965696346187, -167.21528146934, 177.219093253956]

array_of_lat = [7.07533432185069, -71.1633951653961, 83.684201546539, -41.7868611360175, 22.3943085903501]

array_of_markers_hashes = []




arrays ruby hash
1个回答
4
投票

试试这种方式

markers = array_of_lon.zip(array_of_lat).map do |lon, lat|
  { latitude: lat, longitude: lon }
end
 => [{:latitude=>7.07533432185069, :longitude=>162.143815475374}, {:latitude=>-71.1633951653961, :longitude=>168.950878940823}, {:latitude=>83.684201546539, :longitude=>3.64965696346187}, {:latitude=>-41.7868611360175, :longitude=>-167.21528146934}, {:latitude=>22.3943085903501, :longitude=>177.219093253956}] 

2
投票

对于单对值,你会使用。

lon = 162.143815475374
lat = 7.07533432185069

{ lon: lon, lat: lat }
#=> {:lon=>162.143815475374, :lat=>7.07533432185069}

要把两个数组结合起来,就会用: zip:

array_of_lon.zip(array_of_lat)
#=> [
#     [162.143815475374, 7.07533432185069],
#     [168.950878940823, -71.1633951653961],
#     [3.64965696346187, 83.684201546539],
#     [-167.21528146934, -41.7868611360175],
#     [177.219093253956, 22.3943085903501]
#   ]

最后是 map 将这些对子转换为标记。

array_of_lon.zip(array_of_lat).map do |lon, lat|
  { lon: lon, lat: lat }
end
#=> [
#     {:lon=>162.143815475374, :lat=>7.07533432185069},
#     {:lon=>168.950878940823, :lat=>-71.1633951653961},
#     {:lon=>3.64965696346187, :lat=>83.684201546539},
#     {:lon=>-167.21528146934, :lat=>-41.7868611360175},
#     {:lon=>177.219093253956, :lat=>22.3943085903501}
#   ]
© www.soinside.com 2019 - 2024. All rights reserved.