Ruby paizaレベルアップ問題集(ハッシュ1)

paizaラーニング(初心者〜中級者向けのプログラミング学習サービス)で、ハッシュを使いそうな問題を見つけたのでやってみる。

paiza.jp

共通ルール

入力

  • 入力値最終行の末尾に改行が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日に少ししかできない。ということで続きはまた今度。