Issue #15143 has been updated by sawa (Tsuyoshi Sawada).


Sorry that I missed the previous duplicate proposals (I found that I had even commented on one of them, which I had forgotten about). But it looks like four years have passed since then, and the situation has changed perhaps. Or, it may have worth proposing again to indicate that many people want such feature.

I am grateful to Matz for accepting this.

----------------------------------------
Feature #15143: Extend `Enumerable#to_h`
https://bugs.ruby-lang.org/issues/15143#change-74118

* Author: sawa (Tsuyoshi Sawada)
* Status: Open
* Priority: Normal
* Assignee: nobu (Nobuyoshi Nakada)
* Target version: 
----------------------------------------
Often, we call `Array#to_h` to the result of  `Enumerable#map`:

```ruby
(1..5).map{|x| [x, x ** 2]}.to_h
#=> {1=>1, 2=>4, 3=>9, 4=>16, 5=>25}
```

I am thinking of a feature to do this in a single method call.

Currently, `Enumerable#to_h` does not accept a block. I propose that, when `Enumerable#to_h` is called with a block (that has a subarray representing a key-value pair), return a hash that would be returned by applying the block to `map`, and `to_h` to the result:

```ruby
(1..5).to_h{|x| [x, x ** 2]}
#=> {1=>1, 2=>4, 3=>9, 4=>16, 5=>25}
```

Ideally, I request this to be done internally to Ruby without creating an intermediate parent array.



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