From: "seanpdoyle (Sean Doyle) via ruby-core" Date: 2024-09-28T21:08:50+00:00 Subject: [ruby-core:119331] [Ruby master Feature#20768] Add Hash#delete_at Issue #20768 has been reported by seanpdoyle (Sean Doyle). ---------------------------------------- Feature #20768: Add Hash#delete_at https://bugs.ruby-lang.org/issues/20768 * Author: seanpdoyle (Sean Doyle) * Status: Open ---------------------------------------- Add `Hash#delete_at` to delete values from a list keyed by its arguments. The interface and return values draw inspiration from [Hash#values_at](https://docs.ruby-lang.org/en/3.3/Hash.html#method-i-values_at) and [Array#delete_at](https://docs.ruby-lang.org/en/3.3/Array.html#method-i-delete_at). It can pair nicely with multiple assignment to deconstruct a `Hash` instance: ```ruby hash = { a: true, b: false } a, c = hash.delete_at(:a, :c) # => [ true, nil ] hash # => { b: false } ``` Similar outcomes can be achieved with rightward assignment: ```ruby hash = { a: true, b: false } hash => { a:, **rest } a # => true rest # => { b: false } ``` However, rightward assignment will raise an error when a key is missing, whereas `Hash#delete_at` could return `nil` or the `Hash#default_value`: ```ruby hash => { c: } # => raises NoMatchingPatternKeyError ``` Similarly, rightward assignment does not mutate the original `Hash` instance. In some circumstances, this is beneficial. However, others that require mutation would involve re-assigning the variable: ```ruby hash => { a:, **hash } a # => true hash # => { b:false } ``` Finally, a block can be passed in the same style as [Hash#delete](https://docs.ruby-lang.org/en/3.3/Hash.html#method-i-delete) to provide a default value: ```ruby attributes = { disabled: true, aria: { label: "label text" } } aria, data = attributes.delete_at(:aria, :data) { Hash.new } attributes # => { disabled: true } aria # => { label: "label text" } data # => {} ``` -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/