diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-06-04 23:37:13 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-06-04 23:37:13 +0900 |
| commit | 13728e203e82a3225132fdc2437e6e28e3e2f6f7 (patch) | |
| tree | 89d39cf3322b9fb5c7ca255139a2ff82c6440470 /mrbgems/mruby-enum-ext/mrblib | |
| parent | 172060877a80d5f1c5bd725dafd041c7180e9a28 (diff) | |
| download | mruby-13728e203e82a3225132fdc2437e6e28e3e2f6f7.tar.gz mruby-13728e203e82a3225132fdc2437e6e28e3e2f6f7.zip | |
add Enumerable#to_h; ref #2348
Diffstat (limited to 'mrbgems/mruby-enum-ext/mrblib')
| -rw-r--r-- | mrbgems/mruby-enum-ext/mrblib/enum.rb | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/mrbgems/mruby-enum-ext/mrblib/enum.rb b/mrbgems/mruby-enum-ext/mrblib/enum.rb index 5abb75d54..5856fb363 100644 --- a/mrbgems/mruby-enum-ext/mrblib/enum.rb +++ b/mrbgems/mruby-enum-ext/mrblib/enum.rb @@ -669,4 +669,26 @@ module Enumerable end ary end + + ## + # call-seq: + # enum.to_h -> hash + # + # Returns the result of interpreting <i>enum</i> as a list of + # <tt>[key, value]</tt> pairs. + # + # %i[hello world].each_with_index.to_h + # # => {:hello => 0, :world => 1} + # + + def to_h + h = {} + self.each do |*v| + v = v.__svalue + raise TypeError, "wrong element type #{v.class} (expected Array)" unless v.is_a? Array + raise ArgumentError, "element has wrong array length (expected 2, was #{v.size})" if v.size != 2 + h[v[0]] = v[1] + end + h + end end |
