Techioz Blog

Ruby でキーの配列と値の配列をハッシュに変換する

概要

次のような 2 つの配列があります。

keys = ['a', 'b', 'c']
values = [1, 2, 3]

Ruby でこれらの配列を次のハッシュに変換する簡単な方法はありますか?

{ 'a' => 1, 'b' => 2, 'c' => 3 }

これは私の方法ですが、これを簡単に行うための組み込みメソッドが必要だと思います。

def arrays2hash(keys, values)
  hash = {}
  0.upto(keys.length - 1) do |i|
      hash[keys[i]] = values[i]
  end
  hash
end

解決策

以下は 1.8.7 で動作します。

keys = ["a", "b", "c"]
values = [1, 2, 3]
zipped = keys.zip(values)
=> [["a", 1], ["b", 2], ["c", 3]]
Hash[zipped]
=> {"a"=>1, "b"=>2, "c"=>3}

これは、Ruby の古いバージョン (1.8.6) では動作しないようです。以下は下位互換性がある必要があります。

Hash[*keys.zip(values).flatten]