【Ruby超入門】ハッシュの基本
今回は Ruby でよく出てくるハッシュについて詳しく紹介していきます。
ハッシュは配列のように複数のデータを格納するオブジェクトですが、配列とは違うのでちゃんと理解して使用できるようにしましょう。
ハッシュとは
{"Ruby" => "Rails", "PHP" => "Laravel", "Python" => "Django"}
ハッシュとは複数のデータをまとめて格納できるオブジェクトです。
配列と似ていますが、「キー」と「値」のセットで複数のデータを扱います。
- ハッシュは {} の中にカンマ区切りで「キー」と「値」の組を複数書いていく。
- 「キー」の後に =>(ハッシュロケット)を書き、それに続いて「値」を記述する。
- 中身が無い場合は空のハッシュができる。
- 「キー」と「値」には種類の違うオブジェクトを入れられる。
- 他の言語では連想配列などと呼んだりする。
- ハッシュの「キー」と「値」はシンボルにできる。
- シンボルが「キー」になる場合は => を省略できるが、 : が前後入れ変わる記述となる。
{"Ruby" => "Rails", "PHP" => "Laravel"}
# 「キー」をシンボルにして「=>」を省略
{Ruby: "Rails", PHP: "Laravel"}
# 「値」もシンボルにできる
{Ruby: :Rails, PHP: :Laravel}
ハッシュの基本的な使い方
「キー」と「値」を追加
ハッシュは「キー」と「値」を指定することで追加できます。
languages = {"Ruby" => "Rails", "PHP" => "Laravel"}
# Pythonを追加する
languages["Python"] = "Django"
#=> "Django"
p languages
#=> {"Ruby" => "Rails", "PHP" => "Laravel", "Python" => "Django"}
「変数(languages)」の「キー(Python)」に、「値(Django)」を代入するようなイメージです。
追加した「キー」と「値」の組は末尾に追加されますが、ハッシュでは「キー」を指定して「値」を代入したり取得したりする使い方が多いため、順番を意識することはあまりありません。
また、すでに存在する「キー」を指定した場合は「値」が上書きされます。
languages = {"Ruby" => "Rails", "PHP" => "Laravel"}
# すでに存在するPHPを指定
languages["PHP"] = "CakePHP"
#=> "CakePHP"
p languages
#=> {"Ruby" => "Rails", "PHP" => "CakePHP"}
ハッシュから「値」を取り出す
ハッシュは「キー」を指定することでその「値」を取り出すことができます。
languages = {"Ruby" => "Rails", "PHP" => "Laravel"}
puts languages["Ruby"]
#=> Rails
配列では[n]というように n 番目の要素取り出していましたが、ハッシュはインデックス番号ではなく「キー」を指定することで、組となっている「値」を取得します。
存在しない「キー」を指定すると nil を返します。
languages = {"Ruby" => "Rails", "PHP" => "Laravel"}
puts languages["JavaScript"]
#=> nil
ハッシュから「キー」と「値」の組を削除
ハッシュから「キー」と「値」の組を削除するときは delete メソッドを使います。
指定した「キー」がなければ nil を返します。
languages = {"Ruby" => "Rails", "PHP" => "Laravel"}
puts languages.delete("PHP")
#=> Laravel
p languages
#=> {"Ruby" => "Rails"}
puts languages.delete("PHP")
#=> nil
要素数の取得
size メソッドを使うとハッシュの要素の個数を調べることができます。
hash = {}
puts hash.size
#=> 0
hash = {"x" => 1, "y" => 2, "z" => 3}
puts hash.size
#=> 3
size メソッドは length メソッドのエイリアスなので、length メソッドを使用しても要素の数を取得できます。
hash = {"x" => 1, "y" => 2, "z" => 3}
puts hash.length
#=> 3
ハッシュを使った繰り返し処理
each メソッドを使うと「キー」と「値」の組み合わせを格納した順に取り出すことができます。
languages = {"Ruby" => "Rails", "PHP" => "Laravel"}
languages.each do |key, value|
puts "#{key} : #{value}"
end
#=> Ruby : Rails
#=> PHP : Laravel
each は配列でも使うので、以下の記事も参考にしてください。
配列の each と違って、ブロック引数が「キー」と「値」の 2 つになっている点に注意しましょう。
each ではブロック引数を 1 つにできて、この場合は「キー」と「値」が配列に格納されます。
languages = {"Ruby" => "Rails", "PHP" => "Laravel"}
languages.each do |key_value|
key = key_value[0]
value = key_value[1]
puts "#{key} : #{value}"
end
#=> Ruby : Rails
#=> PHP : Laravel
ハッシュの同値比較
== でハッシュ同士を比較すると、同じハッシュかどうかをチェッできますす。
すべての「キー」と「値」が同じであれば true が返ります。
並び順が異なっていてもすべての「キー」と「値」が同じであれば true が返ります。
a = {"x" => 1, "y" => 2, "z" => 3}
b = {"x" => 1, "y" => 2, "z" => 3}
c = {"z" => 3, "x" => 1, "y" => 2}
d = {"x" => 1, "y" => 20, "z" => 3}
# 同じなのでtrue
puts a == b #=> true
# 順番は違うが、同じなのでtrue
puts a == c #=> true
# 同じではないのでfalse
puts a == d #=> false
まとめ
以上がハッシュの使い方の紹介でした。
配列と同じように複数のデータを扱いますが、ハッシュは「キー」と「値」がセットです。
ハッシュはとてもよく使用するので、しっかり使えるようになりましょう。
Discussion