Just do IT

思うは招く

Ruby Array#delete_if の挙動

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_ifreject!は似た挙動をする。

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メソッドは存在しない。