📌

[Feature #20768] Hash から指定したキーの要素を削除する Hash#delete_at を追加する提案

2024/10/04に公開

[Feature #20768] Add Hash#delete_at

  • Hash から指定したキーの要素を削除する Hash#delete_at を追加する提案
hash = { a: true, b: false }

# キーの値を配列で返す
# キーがない場合は nil を返す
a, c = hash.delete_at(:a, :c) # => [ true, nil ]

# hash からそのキーの要素は取り除かれる
hash # => { b: false }
  • 上記は右代入でも同じ値を取得ことができるんですが
hash = { a: true, b: false }

# 右代入で a: の要素とそれ以外を受け取る
hash => { a:, c:, **rest }

a    # => true
rest # => { b: false }
  • キーが存在しない場合はエラーになると書いてありますね
hash = { a: true, b: false }

# error: {:a=>true, :b=>false}: key not found: :c (NoMatchingPatternKeyError)
hash => { a:, c:, **rest }
attributes = { disabled: true, aria: { label: "label text" } }
aria, data = attributes.delete_at(:aria, :data) { Hash.new }

aria # => { label: "label text" }
data # => {}
attributes # => { disabled: true }
hash = { a: true, b: false }

a, c = [:a, :c].map { hash.delete(_1) }
p a      # => true
p c      # => nil
p hash   # => {:b=>false}
  • こういうのって Hash#except! でできなかったけ?と思ったけど #except はあるけど #except! はないのね
  • あと戻り値も『取り除いた値』じゃなくて『取り除かれなかった値』が返ってきますね
hash = { a: true, b: false }
pp hash.except(:b, :c)
# => {:a=>true}
  • パッとユースケースは思いつかないけどあればなんか使いそうなメソッドではあるかな〜〜〜
GitHubで編集を提案

Discussion