はじめに
配列の概念は理解できましたか?
前回は、配列について学んでいきました。
配列は複数の値を扱えますが、他にも方法があります。
それは、「ハッシュ」です。
ハッシュは、キーと値を関連付けて複数個格納できます。
複数の値を扱えるという点については配列と共通していますが、概念や使い方は異なります。
この記事では、Ruby初心者の方向けに、Rubyでのハッシュの扱い方について説明していきます。
配列と合わせて覚えておきましょう。
ハッシュとはなにか?
ハッシュとは、辞書のようなもので、キーと値をペアにして複数個格納できます。
他の言語では、連想配列やディクショナリと呼ばれているものです。配列のように複数の値を格納できます。
また、Ruby 1.9以降では、キーと値が追加された順序が維持されるようになりました。
とはいえ、順序が重要な場合は、ハッシュを使うべきではないかもしれません。
それでは、実際にハッシュを使ってみましょう。
ハッシュを使ってみよう
ハッシュの定義方法は、これまで学んできたものよりもやや複雑です。
書き方を間違えないように注意しましょう。
次の例をみて下さい。
例:
student = { "name" => "Taro", "age" => 17, "sex" => "Male", }
ハッシュを定義するには、波括弧({})内にキーと値のペアをカンマ(,)区切りで記述します。さらに、キーと値はハッシュロケット(=>)で区切る必要があります。
最後のカンマはあってもなくてもエラーにはなりませんが、つけておくと新しい要素を追加するときに楽です。
ハッシュの要素にアクセスするには、次のようにキーを指定します。
例:
puts student["name"] puts student["age"] puts student["sex"]
ハッシュの要素にアクセスする際は角カッコ([])を使うので、配列に似ていますね。
ちなみに、次のようにキーに数値や変数を使うこともできます。
例:
three = 3 nums = { 1 => "One", 2 => "Two", three => "Three", }
次に、ハッシュの基本的な操作について学んでいきましょう。
ハッシュの基本的な操作
まずは、ハッシュの要素数を取得する方法です。
それには、次のように「sizeメソッド」を使います。
例:
nums = { "one" => 1, "two" => 2, "three" => 3, } puts nums.size
“sizeメソッド”は配列でも使うことができ、”lengthメソッド”と同じ結果を返します。
逆に、ハッシュで”lengthメソッド”を使うことも可能です。
結果はどちらも同じなので、使い分けるか、どちらかに統一するようにしましょう。
次に、ハッシュの要素の追加・更新・削除をしてみましょう。
それには、次のようにします。
例:
student = {} #キーと値を追加する student["name"] = "Taro" student["age"] = 17 student["sex"] = "Male" #値を更新する student["age"] = 18 #キーと値を削除する student.delete("sex") puts student
例では、空のハッシュを作成して、それに対して要素の追加・更新・削除を行っています。
ハッシュでは、キーを中心に操作を行うことを覚えておきましょう。
また、キーもしくは値をまとめて取り出したいときは、次のようにします。
例:
student = { "name" => "Taro", "age" => 17, "sex" => "Male", } puts student.keys puts student.values
「keysメソッド」および「valuesメソッド」は、それぞれ配列で結果を返します。
どちらか一方のみを列挙したいときに役立つでしょう。
配列とハッシュのネストについて
配列やハッシュの値には、任意の要素が持てます。
つまり、配列やハッシュでさえも格納できるということです。
このため、次のように配列の配列を作ることができます。
例:
matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] puts matrix[0][0] puts matrix[1][1] puts matrix[2][2]
ハッシュの場合も同様に、次のようにネスト(階層化)することができます。
例:
students = { "001" => { "name" => "Taro", "age" => 17, }, "002" => { "name" => "Hanako", "age" => 16, }, "003" => { "name" => "Shinji", "age" => 17, } } puts students["002"]["name"] puts students["002"]["age"]
このように、配列やハッシュ、数値、文字列などを組み合わせることで、多様なデータ構造を作ることができます。
扱うデータによって、適切な構造を考えてみましょう。
まとめ
ハッシュのイメージが掴めましたか?
ハッシュは辞書の目次のようなもので、キーから素早く値を取り出せます。
キーと値が格納された順番が維持されることを覚えておいて下さい。
Rubyでは、配列のインデックスと同様に、存在しないキーにアクセスしてもエラーとならないことに注意しましょう。