From 13728e203e82a3225132fdc2437e6e28e3e2f6f7 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Wed, 4 Jun 2014 23:37:13 +0900 Subject: add Enumerable#to_h; ref #2348 --- mrbgems/mruby-enum-ext/mrblib/enum.rb | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'mrbgems/mruby-enum-ext/mrblib/enum.rb') 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 enum as a list of + # [key, value] 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 -- cgit v1.2.3