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 に置き換わり、amounts も result も [nil, 2000, 3000] になります。条件に合う要素だけを残したい場合は map! ではなく select を使います。