Ruby ハッシュのキーを条件を指定して削除する

  • 作成日 2021.09.03
  • 更新日 2022.08.04
  • Ruby
Ruby ハッシュのキーを条件を指定して削除する

Rubyで、delete_ifを使用して、ハッシュのキーを条件を指定して削除するサンプルコードを記述してます。rubyのバージョンは2.7.2を使用してます。

環境

  • OS windows10 pro 64bit
  • ruby 2.7.2p137

delete_if使い方

delete_ifを使用すれば、ハッシュのキーを条件を指定して削除することが可能です。

hash.delete_if{|k, v| 条件} 

以下は、ハッシュのキーを条件を指定して削除するサンプルコードとなります。

h = {'key1' => 1, 'key2' => 2, 'key3' => 3}

p h.delete_if{|k, v| k == 'key1'} 
# {"key2"=>2, "key3"=>3}

p h
# {"key2"=>2, "key3"=>3}

# aaが含まれていれば削除
h = {'aa' => 1, 'aab' => 2, 'bb' => 3}

p h.delete_if{|k, v| k.include?("aa")} 
# {"bb"=>3}

p h
# {"bb"=>3}

キーが含まれていない場合はエラーにならずに元の値のままとなります。

h = {'aa' => 1, 'aab' => 2, 'bb' => 3}

p h.delete_if{|k, v| k.include?('c')} 
# {"aa"=>1, "aab"=>2, "bb"=>3}

p h
# {"aa"=>1, "aab"=>2, "bb"=>3}

reject!を使用しても、キーを削除することが可能です。

h = {'aa' => 1, 'aab' => 2, 'bb' => 3}

p h.reject!{|k, v| k.include?('aa')} 
# {"bb"=>3}

p h
# {"bb"=>3}

reject!の場合は、条件に値がない場合は「nil」が返ってきます。

h = {'aa' => 1, 'aab' => 2, 'bb' => 3}

p h.reject!{|k, v| k.include?('c')} 
# nil

p h
# {"aa"=>1, "aab"=>2, "bb"=>3}