Sha256: c6d46af7566a17e25354613a7d490ae78d899ce7fe09404f84ff0e180ca98714

Contents?: true

Size: 1.1 KB

Versions: 2

Compression:

Stored size: 1.1 KB

Contents

#!/usr/bin/env ruby
# -*- encoding: utf-8 -*-
# Copyright muflax <mail@muflax.com>, 2013
# License: GNU GPL 3 <http://www.gnu.org/copyleft/gpl.html>

module Enumerable
  def average
    self.sum.to_f / self.size.to_f
  end
  alias :mean :average
  alias :avg  :average

  def geometric_mean
    self.reduce(:*).to_f ** (1.0 / self.size.to_f)
  end

  def median
    self.percentile 0.5
  end

  def median_by &block
    self.percentile_by 0.5, &block
  end

  def percentile percent
    self.sort[(self.size * percent).round]
  end

  def percentile_by percent, &block
    self.sort_by(&block)[(self.size * percent).round]
  end

  def triangle
    self.to_a.triangle
  end

  def histogram &block
    histo = vivaHash 0
    self.each do |el|
      histo[block.call(el)] += 1
    end

    histo
  end

  def count_by &block
    self.histogram(&block).sort_by(&:second).to_h
  end

  def rfind *arg, &block
    self.reverse.find(*arg, &block)
  end
end

class Object
  def in? other
    other.include?(self)
  rescue NoMethodError
    raise ArgumentError.new("The parameter passed to #in? must respond to #include?")
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
muflax-0.3.9 lib/muflax/enumerable.rb
muflax-0.3.8 lib/muflax/enumerable.rb