Project

General

Profile

Feature #9108

Updated by ko1 (Koichi Sasada) over 7 years ago

=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: 

 ```ruby 
     

     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. 

 ```ruby 
     

     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... 

 ```ruby 
     

     sounds[:dog, :cat].values.join #=> 'woofmeow' 
 ``` 

 You could do something similar for the setter also... 

 ```ruby 
     

     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

Back