Ruby Array・Hash の練習問題(前半)

ハッシュを使う機会が少なく使いこなせる自信がないので、この前紹介してもらった練習問題をやってみる。

attracie.hatenablog.com

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 が思いのほか難しかったので今日はここまで。。。

masuyama13.hatenablog.com