ハッシュを使う機会が少なく使いこなせる自信がないので、この前紹介してもらった練習問題をやってみる。
Q1
{ a: 1, b: 2, c: 3, d: 4 }
# 上のHashから
[:a, :b, :c, :d]
# という結果を得てください。
自分の解答
hash = { a: 1, b: 2, c: 3, d: 4 } ary = [] hash.each_key do |key| ary << key end p ary
Hash#each_key (Ruby 2.7.0 リファレンスマニュアル)
カンニング後のコード
hash = { a: 1, b: 2, c: 3, d: 4 } p hash.keys
Hash#keys (Ruby 2.7.0 リファレンスマニュアル)
irb では以下でもできた。
irb(main):001:0> { a: 1, b: 2, c: 3, d: 4 }.keys => [:a, :b, :c, :d]
解答として載ってるコードだが、irb 以外ではエラーになるのはなぜだ。
$ ruby q1.rb q1.rb:1: syntax error, unexpected ':', expecting '}' p { a: 1, b: 2, c: 3, d: 4 }.keys
Q2
[ 1, 2, 3, 4]
# という配列を
[ [1], [2], [3], [4] ]
# という配列に変換
自分の解答(1)
ary = [ 1, 2, 3, 4] ans = [] ary.each do |ele| ans << [ele] end p ans
自分の解答(2)
p [ 1, 2, 3, 4].map { [_1] }
Q3
[ [:a, 1], [:b, 2], [:c, 3], [:d, 4] ]
# という配列を
{ a: 1, b: 2, c: 3, d: 4 }
# に変換
自分の解答
p [ [:a, 1], [:b, 2], [:c, 3], [:d, 4] ].to_h
Array#to_h (Ruby 2.7.0 リファレンスマニュアル)
Q4
[1,2,3]
# という配列を
[2,4,6]
# に変換
自分の解答
p [1,2,3].map { _1 * 2 }
Q5 が思いのほか難しかったので今日はここまで。。。