paizaラーニング(初心者〜中級者向けのプログラミング学習サービス)で、ハッシュを使いそうな問題を見つけたのでやってみる。
共通ルール
入力
- 入力値最終行の末尾に改行が1つ入ります。
- 文字列は標準入力から渡されます。
出力
- 最後は改行し、余計な文字、空行を含んではいけません。
1. 連想配列(辞書)を使う (paizaランク D 相当)
次のような「ユーザー」と「ユーザーに対応する血液型」を連想配列(辞書)として定義して、それらのキーと値のペアを順に出力してください。
ユーザー ユーザーに対応する血液型 Kyoko B Rio O Tsubame AB KurodaSensei A NekoSensei A 期待する出力
各ユーザーについて順に、ユーザーとユーザーに対応する血液型を半角スペース区切りで出力してください。
最後は改行し、余計な文字、空行を含んではいけません。
自分の解答
users = { "Kyoko" => "B" , "Rio" => "O", "Tsubame" => "AB", "KurodaSensei" => "A", "NekoSensei" => "A" } users.each do |k, v| puts "#{k} #{v}" end
出力結果
Kyoko B Rio O Tsubame AB KurodaSensei A NekoSensei A
2. ユーザーの血液型のデータ処理 (paizaランク C 相当)
n 行のユーザーと血液型の組が与えられるので、ユーザーをキー、血液型を値として、連想配列(辞書)に保存してください。
そのあとで連想配列(辞書)をそのまま表示してください。入力される値
n
A_1 B_1
A_2 B_2
...
A_i B_i
...
A_n B_n期待する出力
1からnまでの各ユーザーについて順に、ユーザーと血液型を表示してください。
最後は改行し、余計な文字、空行を含んではいけません。条件
・1 ≦ n ≦ 100
・1 ≦ A_i の長さ ≦ 50
・B_i は "A", "B", "AB", "O" のいずれか
入力例1
5 Kyoko B Rio O Tsubame AB KurodaSensei A NekoSensei A
出力例1
Kyoko B Rio O Tsubame AB KurodaSensei A NekoSensei A
自分の解答
n = gets.to_i hash = {} n.times do name, b_type = gets.split hash.store(name, b_type) end hash.each do |k, v| puts "#{k} #{v}" end
Array に要素追加するときは <<
とか push
とかすぐに思いつくけど、Hash だと何だっけ??ってなった。
結局ググる。store
とか merge
とか使ったことなかった。やっぱり Hash のこと知らなすぎる。。。もっと使っていきたい。
store
store
を使うことで、Hash に要素を追加できる。正確に言えば、「key に対して value を関連づけ」るメソッド。すでに存在する key を指定すると、value を上書きすることになる。
Hash#[]= (Ruby 2.7.0 リファレンスマニュアル)
例
hash = { "apple" => 3, "banana" => 5 } hash.store("cherry", 10) p hash #=> {"apple"=>3, "banana"=>5, "cherry"=>10}
hash.store("cherry", 10)
は、hash["cherry"] = 10
と同じ意味。
この問題集は無料で挑戦できて自分のコード公開もOK。ただ、「チケット」というものを消費するため1日に少ししかできない。ということで続きはまた今度。