delete_if
は配列やハッシュに使えるメソッド。
ブロックを渡して、配列やハッシュの要素に該当する要素を削除する。
要素を順番にブロックに渡して評価し、その結果が真になった要素をすべて削除します。 delete_if は常に self を返します
Array#delete_if (Ruby 2.7.0 リファレンスマニュアル)
キーと値を引数としてブロックを評価した結果が真であるような要素を self から削除します。
Hash#delete_if (Ruby 2.7.0 リファレンスマニュアル)
Array#delete_if
ary = [0, 1, 2, 3, 4, 5] ary.delete_if { |num| num % 2 == 0 } p ary => [1, 3, 5]
reject! との違い
delete_if
とreject!
は似た挙動をする。
ary = [0, 1, 2, 3, 4, 5] ary.delete_if { |num| num % 2 == 0 } p ary => [1, 3, 5] ary2 = [0, 1, 2, 3, 4, 5] ary2.reject! { |num| num % 2 == 0 } p ary2 => [1, 3, 5]
違いは次のとおり。
delete_if
:常に self を返すreject!
:要素が1つ以上削除されたら self を、1つも削除されなければ nil を返す
ちなみに、reject_if
メソッドは存在しない。