pandamanian’s diary

rubyとrailsについてアウトプットします!

『Ruby』ハッシュについて①

お疲れ様です!

本日はハッシュについてアウトプットします!

まずは簡単なコードでハッシュを定義してみましょう😊

ハッシュの定義

[1] pry(main)> hash = {orange: "200円",melon: "500円", apple: "300円"}
=> {:orange=>"200円", :melon=>"500円", :apple=>"300円"}

これでハッシュを定義する事が出来ました!

この様にハッシュは {キー: バリュー,キー: バリュー}
の様に定義します。

要素のデータを取得するには下記の通りのコードとなります!

要素の取得

[2] pry(main)> hash[:orange]
=> "200円"
[3] pry(main)> hash[:melon]
=> "500円"
[4] pry(main)> hash[:apple]
=> "300円"
[5] pry(main)> 

上記の通り hash[:キー]の様にして値を取得しています!
また値は変更出来ます。 そして新たにキーと値を追加する事も出来ます。

値を変更する

変更するには下記の通りとします。

[11] pry(main)> hash[:apple] = "1000円"
=> "1000円"
[12] pry(main)> hash[:orange]= "5000円"
=> "5000円"
[13] pry(main)> hash[:melon]= "10000円"
=> "10000円"
[14] pry(main)> hash
=> {:orange=>"5000円", :melon=>"10000円", :apple=>"1000円"}


キーと値を追加する

変更する事が出来たので次は新たにキーと値を追加してみましょう!

[18] pry(main)> hash[:grape]= "4000円"
=> "4000円"
[19] pry(main)> hash
=> {:orange=>"5000円", :melon=>"10000円", :apple=>"1000円", :grape=>"4000円"}
[20] pry(main)> 

追加出来ましたね😊


ハッシュでeachメソッドを使う

ハッシュにおいてもeachメソッドを使う事が出来ます!

以下コード例です😊 ここではブロック引数が一つの場合と二つの場合に分けて挙動の確認をしましょう!

まずはブロック引数が一つの場合です。

[21] pry(main)> hash.each do |h|
[21] pry(main)*   p h
[21] pry(main)* end  
[:orange, "5000円"]
[:melon, "10000円"]
[:apple, "1000円"]
[:grape, "4000円"]
=> {:orange=>"5000円", :melon=>"10000円", :apple=>"1000円", :grape=>"4000円"}

この様に配列で返ってきます!

次にブロック引数が二つの場合はどうでしょうか?

[23] pry(main)> hash.each do |key,value|
[23] pry(main)*   p "キーは#{key}で値は#{value}です"  
[23] pry(main)* end  
"キーはorangeで値は5000円です"
"キーはmelonで値は10000円です"
"キーはappleで値は1000円です"
"キーはgrapeで値は4000円です"
=> {:orange=>"5000円", :melon=>"10000円", :apple=>"1000円", :grape=>"4000円"}

この様に
一つ目の引数にはキーが入ります。
二つ目の引数には値が入ります。


引数の数が代わるだけで挙動が変化して返ってくる結果が変わるのは面白いですね😊

削除する

そしてキーと値を削除したい場合はdeleteメソッドを使用します!

[24] pry(main)> hash.delete(:orange)
=> "5000円"
[25] pry(main)> hash
=> {:melon=>"10000円", :apple=>"1000円", :grape=>"4000円"}

この様にキーを引数に渡すとそのキーに関連づけされた値も削除されます!

何が言いたいのかって言うと

[25] pry(main)> hash
=> {nil =>"5000円", :melon=>"10000円", :apple=>"1000円", :grape=>"4000円"}

の様にはならないって事ですね!

ではでは引き続き学習頑張りましょう!