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"
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" }