Ruby 3.4 リファレンスマニュアル

instance method Array#keep_if

keep_if {|item| ... } -> selfRuby 1.9.3 から[permalink][rdoc][edit]
keep_if -> Enumerator

ブロックが真を返した要素を残し、偽を返した要素を自身から削除します。

a = %w{ a b c d e f }
p a.keep_if {|v| v =~ /[aeiou]/} # => ["a", "e"]
p a # => ["a", "e"]

keep_if は常に self を返しますが、Array#select! は要素が 1 つ以上削除されれば self を、 1 つも削除されなければ nil を返します。

a = %w{ a b c d e f }
p a.keep_if {|v| v =~ /[a-z]/ } # => ["a", "b", "c", "d", "e", "f"]
p a # => ["a", "b", "c", "d", "e", "f"]

ブロックが与えられなかった場合は、自身と keep_if から生成した Enumerator オブジェクトを返します。

[SEE_ALSO] Array#select!, Array#delete_if