summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-enum-ext/mrblib/enum.rb
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2014-06-04 23:37:13 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2014-06-04 23:37:13 +0900
commit13728e203e82a3225132fdc2437e6e28e3e2f6f7 (patch)
tree89d39cf3322b9fb5c7ca255139a2ff82c6440470 /mrbgems/mruby-enum-ext/mrblib/enum.rb
parent172060877a80d5f1c5bd725dafd041c7180e9a28 (diff)
downloadmruby-13728e203e82a3225132fdc2437e6e28e3e2f6f7.tar.gz
mruby-13728e203e82a3225132fdc2437e6e28e3e2f6f7.zip
add Enumerable#to_h; ref #2348
Diffstat (limited to 'mrbgems/mruby-enum-ext/mrblib/enum.rb')
-rw-r--r--mrbgems/mruby-enum-ext/mrblib/enum.rb22
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