From: "phluid61 (Matthew Kerwin)" Date: 2013-11-14T12:46:24+09:00 Subject: [ruby-core:58326] [ruby-trunk - Feature #9108] Hash sub-selections Issue #9108 has been updated by phluid61 (Matthew Kerwin). =begin In your proposal, what would happen with undefined keys? I see two reasonable options: sounds = {dog: 'woof', cat: 'meow'} # option 1: sounds[:dog, :fish] #=> {dog: 'woof'} # option 2: sounds[:dog, :fish] #=> {dog: 'woof', fish: nil} Of the two, I'd much prefer the first. A third option is to raise an exception, but that seems the least friendly of all. If approved, I'd be +1 on the multiple-setter as well. I've had scenarios in which I'd have used it had it been available. We should note the previous feature discussions (can't remember issue numbers) involving nested lookups, which also suggested a multiple-argument #[] semantic. =end ---------------------------------------- Feature #9108: Hash sub-selections https://bugs.ruby-lang.org/issues/9108#change-42921 Author: wardrop (Tom Wardrop) Status: Open Priority: Normal Assignee: Category: Target version: =begin Hi, I seem to regularly have the requirement to work on a sub-set of key/value pairs within a hash. Ruby doesn't seem to provide a concise means of selecting a sub-set of keys from a hash. To give an example of what I mean, including how I currently achieve this: sounds = {dog: 'woof', cat: 'meow', mouse: 'squeak', horse: 'nay', cow: 'moo'} domestic_sounds = sounds.select { |k,v| [:dog, :cat].include? k } #=> {dog: 'woof', cat: 'meow'} I think a more concise and graceful solution to this would be to allow the Hash#[] method to take multiple arguments, returning a sub-hash, e.g. domestic_sounds = sounds[:dog, :cat] #=> {dog: 'woof', cat: 'meow'} I had a requirement in the current project I'm working on to concatenate two values in a hash. If this proposed feature existed, I could of just done this... sounds[:dog, :cat].values.join #=> 'woofmeow' You could do something similar for the setter also... sounds[:monkey, :bat] = 'screech' sounds #=> {dog: 'woof', cat: 'meow', mouse: 'squeak', horse: 'nay', cow: 'moo', monkey: 'screech', bat: 'screech'} Concise, convenient and readable. Thoughts? =end -- http://bugs.ruby-lang.org/