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