diff options
| author | skandhas <[email protected]> | 2013-03-22 16:07:10 +0800 |
|---|---|---|
| committer | skandhas <[email protected]> | 2013-03-22 16:07:10 +0800 |
| commit | 35bcc8f85047d85368045fc07e24091cabc1701f (patch) | |
| tree | 903358539829dfa3061a24f003048eff102f8364 /mrbgems/mruby-enum-ext/mrblib | |
| parent | 39a553d44e99375fecf7dc05c4d93053e61d4d95 (diff) | |
| download | mruby-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.rb | 19 |
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 |
