0

私は次のような配列を持っています:

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

これをハッシュの配列に変換しようとしています。各ハッシュには2つのキーと値のペアがあり、キーは「time」または「elevation」のいずれかであり、「time」ハッシュの値は[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

返された結果を 2 つずつバッチ処理する each_slice(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 に答える