目的
ハッシュについて体系的に理解したいと思ったので記述しておく
ハッシュについて
- ハッシュは、本質的には配列と同じだが、インデックスとして整数値以外のものも使用できる点が配列と異なる。
- 1.の理由から幾つかの言語 (特にPerl) ではハッシュを連想配列と呼ぶこともある
- ハッシュのインデックス (キーと呼ぶのが一般的) は、通常何らかのオブジェクト。
- ハッシュは、キーと値のペアを波かっこで囲んで表記する。 キーと値のペアを持たない波かっこの組 ({}) は空のハッシュを表す。
1つ目の記法
rails_console
>> user = {} # {}は空のハッシュ
=> {}
>> user["first_name"] = "Bob" # キーが "first_name" で値が "Bob"
=> "Bob"
>> user["last_name"] = "Dylan" # キーが "last_name" で値が "Dylan"
=> "Dylan"
>> user["first_name"] # 要素へのアクセスは配列の場合と似ている
=> "Bob"
>> user # ハッシュのリテラル表記
=> {"last_name"=>"Dylan", "first_name"=>"Bob"}
2つ目の記法
ハッシュの1要素を角かっこを使って定義する代わりに、以下のようにキーと値をハッシュロケットと呼ばれる=> によってリテラル表現する方法(角かっこで表現するより楽)。
rails_console
user = {"first_name" => "Bob", "last_name" => "Dylan"}
3つ目の記法(シンボルによる記法)
<ポイント>
1. ハッシュのキーとして文字列を使用していたが、Railsでは文字列よりもシンボルを使用する方が普通
2. シンボルは文字列と似ているがクォートで囲む代わりにコロンが前に置かれている点が異なる。
3. Railsではシンボルをふんだんに使用している
シンボルによる記法(1)
user = {:first_name => "Bob", :last_name => "Dylan"}
シンボルによる記法(2)
シンボルとハッシュロケットの組み合わせを、以下のようにキーの名前の (前ではなく) 後にコロンを置き、その後に値が続くように置き換えたもの。
user = {first_name: "Bob", last_name: "Dylan"}
- どちらの記法もよく使われているので、両方の見分けがつくことが重要。
- :nameはシンボルとして独立しているが、引数を伴わないname:では意味が成り立たない。
以下のコードの:name =>とname:は、ハッシュとしてのデータ構造は全く同じ。
rails_console
{ :name => "Bob Dylan" }
rails_console
{ name: "Bob Dylan" }
ハッシュの値にはほぼ何でも使用することができ、他のハッシュを使用することすらできる。
rails_console
>> params = {} # 'params' というハッシュを定義。
=> {}
>> params[:user] = { name: "Bob", email: "bob@example.com" }
=> {:name=>"Bob", :email=>"bob@example.com"}
>> params
=> {:user=>{:name=>"Bob", :email=>"bob@example.com"}}
>> params[:user][:email]
=> "bob@example.com"