はじめに
前回配列についてまとめてみて、個人的に配列とハッシュは組み合わせると力を発揮するセットのように思っていますので、前回の続きではないですが、今回はハッシュについてまとめたいと思います。
ハッシュとは
ハッシュはデータとその名前の2つを1セットの要素として持つ値です。
ハッシュではデータをバリュー、その名前をキーと言います。
ハッシュも配列のように複数のデータを持つことができますが、配列は順番でデータの管理をしていたのに対し、ハッシュはキーで管理します。
またこの管理方法をキーバリューストアと言います。
なぜハッシュを使うのか
配列でデータを管理をするには限界があります。
例えば、身長を管理している配列があるとします。
そこにはたくさんの身長が入っていますが、誰の身長かはわからないですよね。
そこで名前も保存しようとして、そこに名前を放り込むと、余計ごちゃごちゃになってしまうのが明白です。
height = [ 160, 165, 162, 170, "花子", "太郎" ]
↑めちゃくちゃです 笑
ハッシュはこう言うデータを扱うときに力を発揮します。
ハッシュを生成
ハッシュの生成方法は{}を使います
変数 = {}
これで空のハッシュは完成です。配列同様初めから要素を持って生成させることも可能です。
ハッシュはキーとバリューの2つで1セットなので記述の仕方も少々違います。
変数 = { キー1 => バリュー1, キー2 => バリュー2, キー3 => バリュー3}
こんな感じで書きます。キーとバリューを =>(ロケットハッシュ)でセットにして記述します。
で、毎回思うのですが、紹介しておきながらあまりこの書き方しないんですね。
どの参考書でも結構この書き方をこってり説明してから、シンボルの説明があって、基本的にはこっち使いますって言われて、先に言って!て言いたくなります 笑
ただ、様々な書き方があると言うことは知っておかないと、そういうコードに出会ったときに戸惑ってしまうので、知っておいた方がいいのはいいでしょう。
そのシンボルってものなんですが、
見た目は文字列のようですが中身は数値になっている値だそうです。
シンボルを宣言するときは先頭に:コロンをつけます。
シンボルをハッシュに用いる場合、このように書きます。
hash = { name: "John"}
ハッシュに具体的な情報を与えて生成してみます
student = { "name" => "John", "age" => 10 }
teacher = { name: "Mike", age: 25 }
ハッシュに値を追加
配列で言えば、 <<を使って値を追加しました。
ハッシュの場合、配列で添字を指定するように[]の中にキーを記述して、バリューを代入します。
ハッシュ[追加するキー] = 値
先ほどのteacherに担当教科を示す値を追加します。
student = { name: "John", age: 10 }
teacher = { name: "Mike", age: 25 }
teacher[:subject] = "English"
これでteacherに新たにsubjectというキーが追加されました。
指定したハッシュの値を取り出す
ハッシュではキーを指定することでバリューを取り出します。
配列でいう添字の代わりにキーを指定する感じですね
今までのstudent,teacherの例で先生の名前を取り出したいときは
puts teacher[:name]
これでteacherの名前、Mikeが表示されます
ハッシュの値を書き換える
これも配列と似てますね。
添字の代わりにキーを指定します。
teacherの名前を変えましょう
teacher[:name] = "Emma"
puts teacher[:name]
これでEmmaが表示されるはずです。
ハッシュの限界
ハッシュはキーでバリューが管理でき、これはこれで大変便利なんですが、ハッシュにも限界があります。
ハッシュを指定するために変数を用意するのですが、増えるとその分変数を用意しなくてはならないので、変数名が一貫せず管理しにくいのです。
そこでハッシュと配列の合わせ技で解消できます。
配列とハッシュの合わせ技
配列の中に複数のハッシュを入れてあげることで、取り出すときに添字とキーを指定してあげることで特定の値を取り出せるようになります。
students = [{ name: "太郎", height: 160}, { name: "花子", height: 154}, { name: "次郎", height: 166}]
といった具合で組み合わせます。
もし花子の身長が欲しかったら students[2][:height]と記述することで取り出すことができるのです。
最後に
配列とハッシュの理解はデータを管理して扱う上でとても重要な役割を果たしています。高度なアルゴリズムを作れるようになるためにも今一度復習しておきたいものです。