なまもの備忘録

気になったことをつらつらと書いていきます

(Ruby) Hashの要素を非破壊的に削除する

こういう欲求に出くわすたびに一々調べて、思い出すのに割合時間を喰っている気がするので。 "Ruby"、"Hash"、"要素"、"非破壊的"、"削除"、でこの方法が引っかかる様にしたかったのが大きいです。

結論

rejectを使う。

[41] pry(main)> hash = {a: 1, b: 2, c: 3}
=> {:a=>1, :b=>2, :c=>3}
[42] pry(main)> hash.reject {|key| key == :a}
=> {:b=>2, :c=>3}
[43] pry(main)> hash
=> {:a=>1, :b=>2, :c=>3}

deleteは破壊的なので使いづらいですね。 ActiveSupportHash#exceptも手軽ですが、バニラなRubyだけで終わらせられると嬉しいこともあるので。

環境

[47] pry(main)> pry-version
Pry version: 0.12.2 on Ruby 2.5.1.