libro
www.tuyano.com
初心者のためのRubyプログラミング入門

配列とハッシュ (3/4)

作成:2012-08-19 10:26
更新:2012-08-19 10:26

■ハッシュ(連想配列)とは?

この配列は、各値に番号を割り振って値を管理します。この割り振られる番号は、ゼロから順番になっています。が、番号だけしか使えないのではちょっと不便な場合もあります。例えば、名前をつけて値を整理できたら便利ですね。「山田」って名前で取り出せばその人のメールアドレスの値が得られるとか、いろいろ使えそうです。

こうした「値に別の値を関連付けて整理する配列」が、「ハッシュ(連想配列)」と呼ばれるものです。ハッシュは、配列と同様に多数の値を保管し管理します。が、インデックス(番号)ではなく、何らかの値を各値に割りつけて管理します。「何らかの値」というとわかりにくいので、とりあえずは「テキスト」を設定すると考えておきましょう。つまり、それぞれの値にそれぞれ名前をつけて整理する、というわけです。

値に付けられる名前は、「キー」と呼ばれます。保管する値は、このキーによって管理されます。このハッシュは、以下のような形で利用します。

●ハッシュの作成
変数 = Hash.new
変数 = { キー1 => 値1 , キー2 => 値2 , ……}

●値の取得/変更
変数 = 配列 [ キー]
配列 [ キー] =

基本的な使い方は配列と同じです。ハッシュを作成する際の書き方だけ注意する必要があるでしょう。例えば、「123」「456」といった値にそれぞれ「x」「y」といったキーを設定してハッシュを作成するなら、こんな具合に記述します。
arr = {'x'=>123, 'y'=>456}
=>という記号でキーと値をつなげて記述するわけですね。これさえ気をつければ、後はそれほど難しくはありません。例えば、xのキーの値を取り出したり、yのキーの値を変更したりするには、
val = arr['x']
arr['y'] = 789
こんな具合にすればいいわけです。配列のインデックス番号がキーに変わるだけですからそう悩むことはないでしょう。


●ハッシュと繰り返し処理
問題は、「すべての要素を扱う」場合でしょう。配列と違い、ハッシュは番号をつけて値を管理していません。これは前要素を取り出し処理したい場合、どうすればいいのでしょう?

実は、ハッシュもちゃんとfor構文で順番に値を取り出すことができるのです。書き方は配列と全く同じ。
for 変数 in ハッシュ
    ……繰り返す処理……
end
このようにして繰り返し処理することができます。ただし! 注意すべきは、ハッシュから値を取り出される変数の中身です。これは、ただ取り出した値が保管されるのではありません。この変数に設定されるのは、「キーと値をひとまとめにした配列」なのです。インデックス番号「0」にキーが、「1」にが保管された配列になるのです。

実際の利用例を下に挙げておきましょう。ハッシュarrの内容をすべて表示するサンプルです。ここでは、for item in arrというようにして変数itemに取り出した内容を以下のようにして出力しています。
puts(item[0] + ":" + item[1])
item[0]でキーが、item[1]で値が取り出され、まとめて表示されるというわけです。この点さえわかれば、ハッシュをforで処理するのは割と簡単ですね。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※サンプルコード

arr = {'A' =>'Hello', 'B' => 'Welcome', 'C' => 'Bye!'}
for item in arr
	puts(item[0] + ":" + item[1])
end

※関連コンテンツ

「初心者のためのRubyプログラミング入門」に戻る