- Home ›
- Ruby入門 ›
- ハッシュ(Hash)クラス
配列からハッシュを作成する
作成された配列オブジェクトからハッシュオブジェクトを作成することができます。特別なメソッドが用意されているわけではないので、別の用途のメソッドを組み合わせることで配列からハッシュを作成します。ここでは Ruby で配列からハッシュを作成する手順について解説します。
(Last modified: )
配列からハッシュを作成する
配列オブジェクトからハッシュオブジェクトを作成します。例えば次のような配列オブジェクトを使用します。
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 番目の方式の配列と同じ形になりましたので最後に
これらのように配列として持っている値からハッシュを作成するには特別なメソッドが用意されているわけではないため、配列に含まれる要素をうまく展開してハッシュの初期値として指定するようにします。
では簡単なサンプルで試してみます。
# 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 )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。