leaning diary Rails

【Learning Diary42】ハッシュの値をメソッドで取り出す・設定する

【Learning Diary42】ハッシュの値をメソッドで取り出す・設定する

 

Railsのハッシュは、今までKeyを指定して取り出したり設定をしていましたが、今回メソッドがあることを知ったので覚書です。

 

配列は、値をインデックス(数字)で取り出します。

 

一方、ハッシュは値をkeyで取り出すところに違いがあります。

 

ハッシュのkeyには主に以下のクラスが使用されますが、私は圧倒的にシンボルの利用が多いです。

 

(Railsにはシンボルの利用が推奨されているためです。)

 

■シンボル(Symbol)

■文字列(String)

■数値(Numeric)

■日付((Date)

 

インデックスとkeyという違いはありますが、ハッシュにKeyを与えて値を取り出したり、特定のKeyに対応する値を設定するには、配列と同じように「[ ]」を使うことができます。

 

>> h = Hash.new
=> {}
>> h["R"] = "Ruby"
=> "Ruby"
>> p h["R"]
"Ruby"
=> "Ruby"

 

関連付けのstoreと値を取り出すfetch

値の登録には、storeメソッドがつかえます。

 

また、値の取り出しにはfetchメソッドが使えます。

 

>> h = Hash.new
=> {}
>> h.store("R","Ruby")
=> "Ruby"
>> p h.fetch("R")
"Ruby"
=> "Ruby"

 

fetchメソッドはKeyが登録されていない場合には例外(KeyError)を発生させます。

 

これは「[ ] 」にはない仕様です。

 

>> p h.fetch("N")
(irb):8:in `fetch': key not found: "N" (KeyError)
    from (irb):8:in `<main>'
    from /Users/tokudome/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/irb-1.8.3/exe/irb:9:in `<top (required)>'
    from /Users/tokudome/.rbenv/versions/3.2.2/bin/irb:25:in `load'
    from /Users/tokudome/.rbenv/versions/3.2.2/bin/irb:25:in `<main>'

 

Keyの登録がない場合に返却される値として、第2引数を指定することもできます。

 

>> h = Hash.new
=> {}
>> h.store("R","Ruby")
=> "Ruby"
>> p h.fetch("R","(undef)")
"Ruby"
=> "Ruby"
>> p h.fetch("N","(undef)")
"(undef)"
=> "(undef)"
>>

 

また、fetchメソッドは、引数にブロックを取ることができます。

 

ブロックが渡されている場合は、ブロックを実行した結果得られる値が、Keyが登録されていない値に返却される値になります。

 

>> h = Hash.new
=> {}
>> p h.fetch("N"){String.new}
""
=> ""
>> p h.fetch("N"){Hash.new}
{}
=> {}
>> h.store("R","Ruby")
=> "Ruby"
>> p h.fetch("R"){String.new}
"Ruby"
=> "Ruby"
>>

 

 

 

-leaning diary, Rails