0

我有一个看起来像这样的数组:

[172336, 60, 172339, 64, 172342, 62, 172345, 61, 172348, 62, .....]

我正在尝试将其转换为哈希数组,其中每个哈希有两个键/值对,键是“时间”或“海拔”,“时间”哈希的值在 [0] 处索引, [2]、[4] 等,而“海拔”位于 [1]、[3] 等。所以,它看起来像:

[{time => 172336, elevation => 60}, {time => 172339, elevation => 64}, {time => 172342, elevation => 62},.....]

通过以下方式获取每个项目很容易:

my_array.each do |x|
 new_array << {:time => x}
end

但这显然会将每个值分配给一个“时间”键。我无法弄清楚如何获得每第二个项目。

4

2 回答 2

6

您可以尝试使用 each_slice(2) 将返回的结果按 2 分批处理

 my_array.each_slice(2) do |value| 
  array << {:time => value[0], :elevation => value[1]}
end

希望这可以帮助

于 2013-01-21T01:53:41.677 回答
1

你可以做

keys = [:time, :elevation]
values = [172336, 60, 172339, 64, 172342, 62, 172345, 61, 172348, 62]

array = values.each_slice(2).map { |value| Hash[keys.zip(value)] }
# [{:time=>172336, :elevation=>60},
#  {:time=>172339, :elevation=>64},
#  {:time=>172342, :elevation=>62},
#  {:time=>172345, :elevation=>61},
#  {:time=>172348, :elevation=>62}]
于 2013-01-21T02:02:54.100 回答