読者です 読者をやめる 読者になる 読者になる

MogLog

メモというか日記というか備忘録というか

【Ruby】Hash#delete(key)、Hash#delete_if

Hash#delete(key)

  • keyに対応する要素を削除する
  • 取り除かれた要素の値を返す。マッチしないkeyを指定した場合はnilを返す。
  • ブロックを渡すことも可能で、このブロックは与えられたkeyにマッチする要素が無いときに評価される。
hash = { one: 1, two: 2, three: 3 }

hash.delete(:one) # => 1

# :oneキーは削除されている
p hash # => { :two=>2, :three=>3 }

# :fourは存在しないのでnilが返る
p hash.delete(:four) # => nil

# :fourは存在しないのでブロックが評価される
p hash.delete(:four) { |key| "`#{key}` Nothing" } # => "`four` Nothing"

instance method Hash#delete

Hash#delete_if

  • キーと値を引数としてブロックを評価した結果が真である要素をselfから削除する
  • Hash#reject!もほぼ同じ動作をするが、返り値が異なる場合がある
  • Hash#delete_ifは破壊的操作をするが、Hash#rejectは破壊的操作をしない
  • メソッド名の末尾に「!」が付いていないが破壊的操作をすることは覚えておきたい
hash = { 2 => '8' , 4 => '6', 6 => '4', 8 => '2' }

# keyよりvalueの方が値が大きい要素を削除する
hash.delete_if { |key, value| key.to_i < value.to_i } # => { 6 => "4", 8 => "2" }

p hash # => { 6 => "4", 8 => "2" }

Hash#rejectは破壊的操作をしない例

hash = { 2 => '8' , 4 => '6', 6 => '4', 8 => '2' }

# keyよりvalueの方が値が大きい要素を削除する
p hash.reject { |key, value| key.to_i < value.to_i }
# => { 6 => "4", 8 => "2" }

p hash
# => { 2 => "8", 4 => "6", 6 => "4", 8 => "2" }

instance method Hash#delete_if