チェリー本 5章 その1

ハッシュ

本当は第4章をじっくり満遍なくやりたかったのですが
チェリー本を広く短期間で全体の章を触れたかったので
一部飛ばしてきました。笑
必ずまた戻ってきます。
きっと...

rubyで難しく感じたので
取り組んでいこうと思いました。

そもそもハッシュって???
ハッシュはキーと値の組み合わせでデータを管理するオブジェクトのこと。
ハッシュの構文になります。

{}

#キーと値の組み合わせを2つ格納するハッシュ
{"キー1"=>"値1","キー2"=>"値2"}

#国ごとの通貨と単位を格納したハッシュ
{ "japan" => "en", "us" => "dollar", "india" => "rupee" }

#もちろん改行して記載可能
{
  "japan" => "en",
  "us" => "dollar",
  "india" => "rupee",
}

#最後に,がついてもエラーにはならない。

要素の追加、取得、削除

追加

新しいキーと値を追加する時の構文

ハッシュ[キー] = 値

ここでは新しくイタリアの通貨を追加します。

currencies = { "japan" => "en", "us" => "dollar", "india" => "rupee" }
currencies["italy"] = "euro"
p currencies
=>
{"japan"=>"en", "us"=>"dollar", "india"=>"rupee", "italy"=>"euro"}

#またすでに存在していた場合は上書きされる。

currencies["japan"] = ""
p currencies
=>
{"japan"=>"", "us"=>"dollar", "india"=>"rupee", "italy"=>"euro"}

取得

キーを取得する時の構文

ハッシュ[キー]

以下はインドの通貨を取得します。
ハッシュの内部構造上キーと値が大量に格納されていても
指定した値を高速で取り出すことができる。

p currencies["india"]
=>
"rupee"

また存在しないキーを指定するとnilがかえる

削除

deleteメソッドを使うと指定したキーに対応する要素を削除できる。

currencies = { "japan" => "en", "us" => "dollar", "india" => "rupee" }
currencies.delete("japan")
p currencies

=>
{"us"=>"dollar", "india"=>"rupee"}

ハッシュを使った繰り返し処理

eachを使うとキーと値の組み合わせ順で取り出すことができる。
キーと値は格納順に取り出されます。
またブロック引数が2つあることも気をつける。

currencies = { "japan" => "en", "us" => "dollar", "india" => "rupee" }
currencies.each { |key, value|
  puts "#{key}:#{value}"
}

=>
japan:en
us:dollar
india:rupee