summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-enum-ext/mrblib
diff options
context:
space:
mode:
authorskandhas <[email protected]>2013-03-22 16:07:10 +0800
committerskandhas <[email protected]>2013-03-22 16:07:10 +0800
commit35bcc8f85047d85368045fc07e24091cabc1701f (patch)
tree903358539829dfa3061a24f003048eff102f8364 /mrbgems/mruby-enum-ext/mrblib
parent39a553d44e99375fecf7dc05c4d93053e61d4d95 (diff)
downloadmruby-35bcc8f85047d85368045fc07e24091cabc1701f.tar.gz
mruby-35bcc8f85047d85368045fc07e24091cabc1701f.zip
add Enumerable#group_by
Diffstat (limited to 'mrbgems/mruby-enum-ext/mrblib')
-rw-r--r--mrbgems/mruby-enum-ext/mrblib/enum.rb19
1 files changed, 19 insertions, 0 deletions
diff --git a/mrbgems/mruby-enum-ext/mrblib/enum.rb b/mrbgems/mruby-enum-ext/mrblib/enum.rb
index b63de0d31..f250d39f1 100644
--- a/mrbgems/mruby-enum-ext/mrblib/enum.rb
+++ b/mrbgems/mruby-enum-ext/mrblib/enum.rb
@@ -142,4 +142,23 @@ module Enumerable
block.call(ary) unless ary.empty?
end
+ ##
+ # call-seq:
+ # enum.group_by {| obj | block } -> a_hash
+ #
+ # Returns a hash, which keys are evaluated result from the
+ # block, and values are arrays of elements in <i>enum</i>
+ # corresponding to the key.
+ #
+ # (1..6).group_by {|i| i%3} #=> {0=>[3, 6], 1=>[1, 4], 2=>[2, 5]}
+
+ def group_by(&block)
+ h = {}
+ self.each do |e|
+ key = block.call(e)
+ h.key?(key) ? (h[key] << e) : (h[key] = [e])
+ end
+ h
+ end
+
end