配列からハッシュを作成する

作成された配列オブジェクトからハッシュオブジェクトを作成することができます。特別なメソッドが用意されているわけではないので、別の用途のメソッドを組み合わせることで配列からハッシュを作成します。ここでは Ruby で配列からハッシュを作成する手順について解説します。

(2021 年 06 月 30 日公開 / 2022 年 10 月 19 日更新)

配列からハッシュを作成する

配列オブジェクトからハッシュオブジェクトを作成します。例えば次のような配列オブジェクトを使用します。

ary = ["suzuki", 87, "itou", 76, "yamada", 69]

配列は、キー、値、と順番に要素として追加されている必要があります。

この配列の値を元にハッシュを作成するには次のように行います。

ary = ["suzuki", 87, "itou", 76, "yamada", 69]
h = Hash[*ary]

配列オブジェクトを格納している変数の先頭にアスタリスク(*)を付けた場合、配列の多重代入と言う処理が行われます。これは配列に格納されている要素をすべてて代入するという方法です。結果として配列に格納されていた各要素が一つ一つ Hash の引数として指定されたのと同じ結果となります。

キーと値の組み合わせが配列になっている場合

またキーと値が 1 つの配列となっているものを要素とした配列を使うこともできます。

ary = [["suzuki", 87], ["itou", 76], ["yamada", 69]]

この配列の値を元にハッシュを作成するには次のように行います。

ary = [["suzuki", 87], ["itou", 76], ["yamada", 69]]
h = Hash[*ary.flatten]

この方法の場合、まず配列「ary」が flatten メソッドによって平坦化された新しい配列が作成されます。つまり配列が次のような配列になります。

ary = ["suzuki", 87, "itou", 76, "yamada", 69]

平坦化された配列は 1 番目の方法と同じ配列となっていますので、その配列に対してアスタリスクを使って多重代入を行うことで Hash の引数として指定を行います。(配列の平坦化については「要素に含まれる別の配列を平坦化する」を参照して下さい)。

キーと値が別々の配列になっている場合

3 番目の方法はキーと値がそれぞれ別の配列となっているもの使います。

keyAry = ["suzuki", "itou", "yamada"]
keyValue = [87, 76, 69]

キーはキーの配列に要素として格納され、値は値の配列に要素として格納されています。配列の値からハッシュを作成するには次のように行います。

keyAry = ["suzuki", "itou", "yamada"]
keyValue = [87, 76, 69]
ary = [keyAry,keyValue].transpose
h = Hash[*ary.flatten]

この方法の場合、まず配列「keyAry」と配列「keyValue」を要素とする配列を作成します。

ary = [["suzuki", "itou", "yamada"], [87, 76, 69]]

次に Array クラスの transpose メソッドによって次のように変換されます。( transpose メソッドについては「要素に配列が含まれる配列を行列とみなして行と列を入れ替える」を参照して下さい)。

ary = [["suzuki", 87], ["itou", 76], ["yamada", 69]]

これで 2 番目の方式の配列と同じ形になりましたので最後に flatten> メソッドによって配列を平滑化した後で多重代入を行うことでHashの引数として指定を行います。

これらのように配列として持っている値からハッシュを作成するには特別なメソッドが用意されているわけではないため、配列に含まれる要素をうまく展開してハッシュの初期値として指定するようにします。

サンプルコード

では簡単なサンプルで試してみます。

# encoding: UTF-8

keyAry = ["suzuki", "itou", "yamada"]
keyValue = [87, 76, 69]

ary = [keyAry,keyValue].transpose
h = Hash[*ary.flatten]

p(h)

実行結果は次のようになります。

配列からハッシュを作成する

-- --

Ruby で配列からハッシュを作成する手順について解説しました。

( Written by Tatsuo Ikura )

広告
Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。