module Piggly::Util::Enumerable
Public Class Methods
count(enum) { |e| ... }
click to toggle source
Count number of elements, optionally filtered by a block
# File lib/piggly/util/enumerable.rb, line 6 def self.count(enum) if block_given? enum.inject(0){|count,e| yield(e) ? count + 1 : count } else enum.length end end
group_by(enum, collection = Hash.new{|h,k| h[k] = [] }) { |item| ... }
click to toggle source
Collect an elements into disjoint sets, grouped by result of the block
# File lib/piggly/util/enumerable.rb, line 29 def self.group_by(enum, collection = Hash.new{|h,k| h[k] = [] }) enum.inject(collection) do |hash, item| hash[yield(item)] << item hash end end
index_by(enum, collection = Hash.new) { |item| ... }
click to toggle source
# File lib/piggly/util/enumerable.rb, line 36 def self.index_by(enum, collection = Hash.new) enum.inject(collection) do |hash, item| hash.update(yield(item) => item) end end
sum(enum, default = 0) { |head| ... }
click to toggle source
Compute sum of elements, optionally transformed by a block
# File lib/piggly/util/enumerable.rb, line 15 def self.sum(enum, default = 0, &block) enum = enum.to_a return default if enum.empty? head, *tail = enum if block_given? tail.inject(yield(head)){|sum,e| sum + yield(e) } else tail.inject(head){|sum,e| sum + e } end end