From: "wardrop (Tom Wardrop)" Date: 2013-11-17T14:39:22+09:00 Subject: [ruby-core:58388] [ruby-trunk - Feature #9108] Hash sub-selections Issue #9108 has been updated by wardrop (Tom Wardrop). =begin (({select(*args)})) just seemed like a more natural interface, though I suppose (({select(enum)})) provides more flexibility and solves any compatibility problems with the current behaviour of select. If an empty enumerable is given, an empty hash is returned. If no argument is given, then the current behaviour of returning an enumerator is respected. That'll work well. In summary, I'm in favour of the (({select(enum)})) implementation, likewise for #reject. =end ---------------------------------------- Feature #9108: Hash sub-selections https://bugs.ruby-lang.org/issues/9108#change-42984 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/