Enumerable応用レベル

次のプログラムを実行すると何が表示されますか?

amounts = [1000, 2000, 3000]

result = amounts.map! { |amount| amount if amount >= 2000 }

p amounts
p result
  • 1[1000, 2000, 3000] と [2000, 3000]
  • 2[nil, 2000, 3000] と [nil, 2000, 3000]
  • 3[2000, 3000] と [2000, 3000]
  • 4[1000, 2000, 3000] と nil

解説

map! は元配列の各要素を、ブロックの返り値で置き換えます。amount if amount >= 2000 は、1000 のとき条件に合わないため nil を返します。そのため先頭要素は nil に置き換わり、amountsresult[nil, 2000, 3000] になります。条件に合う要素だけを残したい場合は map! ではなく select を使います。

問題一覧へ戻る