Ruby超入門 2周目 CHAPTER 6-3 ハッシュの要素を 繰り返し処理する まで

f:id:kkouji0224:20191025224143p:plain

 

『ゼロからわかる Ruby 超入門 (かんたんIT基礎講座) 』
github.com

 ※上の画像はRuby超入門に出てくるハッシュオブジェクトさん

 

はい。こんにちは。眠くてなかなか目が覚めないよ。koujiです。

 

今日は昨日眠くて唐突に分割してしまった、ハッシュの続きを振り返っていきまーす。

 

ハッシュにキーと値を追加

drinks = {cola: 130redbull: 250monster: 300}
drinks[:maca= 350
p drinks

 

こんな感じ。ハッシュの中にコーラもレッドブルもモンスターもあるけど、いまいち刺激が足りねーぜ!!マカがないマカを追加しよう!!そんな時は…

 

変数名[:シンボル] = 値

 

こうやって書いてあげるとdrinksハッシュにマカが追加される!!一番みなぎってくるのはマカのドリンクだと信じて疑いません。

 

で、例えばハッシュの中にすでにコーラあるのにdrinks[:cola] = 400って書いてあげる。きっと名前は同じだけどお高いコーラなのだろう。そうするとキーが後から追加したものに上書きされるんだ。高いコーラってのを飲んでみたいものだ。

 

存在しないキーを指定したとき

drinks = {cola: 130redbull: 250monster: 300}
p drinks[:suppon]

 

てか、マカじゃなくてスッポンエキスなかったっけ?と存在しないsupponを取得しようとすると… nilが取得されるんだね。

 

ちなみに存在しないキーを指定したときの値を指定することもできる。

 

drinks = {cola: 130redbull: 250monster: 300}
drinks.default = "専門店へ行ってこい"
p drinks[:suppon]

 

drink.default = 値 を書いてあげるとハッシュの中に存在しないキーが指定されたときの値を指定できる。なので上の場合だと、さすがにスッポンエキスねーよ!そんなものはない!ってことなのでハッシュに存在なんかするわけないので"専門店へ行ってこい”になるのだ。

 

2つのハッシュを1つにまとめる

 

drinks = {cola: 130redbull: 250monster: 300}
alcohol = {sake: 500wine: 900beer: 500}
drunk = drinks.merge(alcohol)
drunk.default = "専門店へ行ってこい"
p drunk[:suppon]

 

普通のドリンク以外にも酒だ酒もってこい!!に対応するために、まずalcoholハッシュを作りまーす。で、もう一つのdrinksハッシュとガッチャンコするには…

 

ハッシュは全部変数に代入してるので

 

drinksハッシュ.merge(alcoholハッシュ)って書いてあげると1つにまとめられちゃうね。で、さっきみたいにdefault設定しておくと酔っ払いがしつこくスッポンを求めてきても「専門店へ行ってこい」となるんだねー。便利。

 

 

ハッシュの繰り返し処理

drinks = {cola: 130redbull: 250monster: 300}
alcohol = {sake: 500wine: 900beer: 500}
drunk = drinks.merge(alcohol)
drunk.each do |keyvalue|
    puts "#{key}#{value}円だって言ってんだろゴルァ!"
end

 

さっきマージして作ったdrunkに.each do なんだけど配列のときと違って変数が2つになってるね。|key, value|のkeyの方にはシンボルオブジェクトが代入されて、valueの方には値が代入されてる感じだね。で、それをハッシュの中身全部に繰り返すって感じ。

これで泥酔した客にも繰り返し#{key}は#{value}円だって言ってんだろゴルァ!って繰り返し伝えられるようになったぜ。

 

練習問題

※ネタバレ注意なので練習問題楽しみたい人は見ないでください

 

問 1 のハッシュ menu で、キー :tea に対応する値がなければ " 紅茶はありませんか? "
と表示してください

menu = {coffee: 300caffe_latte: 400}
puts "紅茶はありませんか?" unless menu[:tea]

 

これが面白いなーって思ったんだよね。これunless使ってて.defaultで指定してあげるのじゃダメなのかなぁ?って思ったんだけど、上の場合だと、こっちからtea指定して、こっちから「紅茶ねーのか?」って聞いてるイメージだよね。

 

で、上の方で書いたdefaultのsupponだと、こっちがスッポンエキスよこせよ!にたいして、向こうから「専門店へ行ってこい」って言われてるイメージ。よくわかんないけど、そういうイメージというか流れっていうか、そんなものでも書き方かわってくるのかもしれないなーって思ったり思わなかったり。

 

ってな感じでCHAPTER 6はここまで!

 

ハッシュもなかなかおもしろかったぜ!ちなみにこのCHAPTER 6の練習問題は高度なやつがあって難しかった…

 

ということで、またそのうち〜!