中級 › each で配列を回しながら delete すると要素が飛ばされる › パターン1
each で配列を回しながら delete すると要素が飛ばされる
eachで配列を反復しながらdelete_atやdeleteで要素を取り除くと、後続の要素が前に詰まってインデックスがずれ、次に処理されるはずだった要素が読み飛ばされます。
1 nums = [2, 4, 6, 3, 8, 5] 2 ________.each do |n| ^ 3 nums.delete(n) if n.even? 4 end 5 puts nums.inspect
出力: [4, 3, 5]
空欄を埋めて実行を通す
元の配列を直接eachで回しながらdeleteすると、削除によるずれで次の要素が読み飛ばされ、4のような偶数が消えずに残ります。
次の問題