Ruby 2.3.0 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Hashクラス > keep_if

instance method Hash#keep_if

keep_if -> Enumerator[permalink][rdoc]
keep_if {|key, value| ... } -> self
select! -> Enumerator
select! {|key, value| ... } -> self | nil

キーと値を引数としてブロックを評価した結果が真であるような要素を self に残します。

keep_if は常に self を返します。 select! はオブジェクトが変更された場合に self を、 されていない場合に nil を返します。

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

例:

h1 = {}
c = ("a".."g")
c.each_with_index {|e, i| h1[i] = e }

h2 = h1.dup
h1.select!  # => #<Enumerator: {0=>"a", 1=>"b", 2=>"c", 3=>"d", 4=>"e", 5=>"f", 6=>"g"}:select!>

h1.select! { |k, v| k % 3 == 0 }  # => {0=>"a", 3=>"d", 6=>"g"}
h1.select! { |k, v| true }        # => nil
h2.keep_if { |k, v| k % 3 == 0 }  # => {0=>"a", 3=>"d", 6=>"g"}
h2.keep_if { |k, v| true }        # => {0=>"a", 3=>"d", 6=>"g"}

[SEE_ALSO] Hash#select, Hash#delete_if,Hash#reject!