中級 › each で配列を回しながら delete すると要素が飛ばされる › パターン4
each で配列を回しながら delete すると要素が飛ばされる
eachで配列を反復しながらdelete_atやdeleteで要素を取り除くと、後続の要素が前に詰まってインデックスがずれ、次に処理されるはずだった要素が読み飛ばされます。
1 items = [8, 4, 2, 5, 6, 7] 2 _________.each do |n| ^ 3 items.delete(n) if n.even? 4 end 5 puts items.inspect
出力: [4, 5, 7]
空欄を埋めて実行を通す
eachは削除によって縮んだ配列を考慮せず、内部のインデックスを機械的に進めるだけです。
次の問題