From: pablodherrero@...
Date: 2016-07-23T14:57:35+00:00
Subject: [ruby-core:76547] [Ruby trunk Feature#9108] Hash sub-selections

Issue #9108 has been updated by Pablo Herrero.


Any chance something like this could make it into 2.4?.

Is really cumbersome to require ActiveSupport as a dependency just to use a handful of methods and these two are quite common.

BTW: I think *Hash#only(\*args)* / *Hash#except(\*args)* or *Hash#with(\*args)* / *Hash#without(\*args)* are both good options. *Hash#slice* wouldn't really behave very similar to *Array#slice*, so I don't think is a very good option but is at least what AS already does.


----------------------------------------
Feature #9108: Hash sub-selections
https://bugs.ruby-lang.org/issues/9108#change-59780

* Author: Tom Wardrop
* Status: Open
* Priority: Normal
* Assignee: Yukihiro Matsumoto
----------------------------------------
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?




-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>