Rubyのmapで条件分岐をした時にnilが返ってきてしまう時の対処法

f:id:ihatov08:20160926002458j:plain

Rubyのmapメソッドで条件分岐を使う時です。

Rubyのmapメソッドで条件分岐を使うときに、条件に一致しないときに下記のような感じで書くとnilが返ってしまいます。

a = [1,2,3,4,5,6,7,8,9,10]
a = a.map do |i|
next if i.even?
i*10
end
p a
#=>[10, nil, 30, nil, 50, nil, 70, nil, 90, nil]

条件に一致しないときに、元の配列の値を返してあげたい場合はブロック変数を与えましょう。

a = [1,2,3,4,5,6,7,8,9,10]
a = a.map do |i|
next i if i.even?
i*10
end
p a
#=>[10, 2, 30, 4, 50, 6, 70, 8, 90, 10]

なぜnilが変えるのかわからずに苦労しました。。。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です