Module: Enumerable

Defined in:
lib/muflax/align.rb,
lib/muflax/enumerable.rb

Overview

Copyright muflax <[email protected]>, 2013 License: GNU GPL 3 <www.gnu.org/copyleft/gpl.html>

Instance Method Summary collapse

Instance Method Details

#averageObject Also known as: mean, avg



7
8
9
# File 'lib/muflax/enumerable.rb', line 7

def average
  self.sum.to_f / self.size.to_f
end

#count_by(&block) ⇒ Object



46
47
48
# File 'lib/muflax/enumerable.rb', line 46

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

#geometric_meanObject



13
14
15
# File 'lib/muflax/enumerable.rb', line 13

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

#histogram(&block) ⇒ Object



37
38
39
40
41
42
43
44
# File 'lib/muflax/enumerable.rb', line 37

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

  histo
end

#length_of_longestObject



17
18
19
# File 'lib/muflax/align.rb', line 17

def length_of_longest
  self.longest.str_length
end

#length_of_shortestObject



21
22
23
# File 'lib/muflax/align.rb', line 21

def length_of_shortest
  self.shortest.str_length
end

#longestObject

find longest element



13
14
15
# File 'lib/muflax/align.rb', line 13

def longest
  self.max_by{|s| s.str_length}
end

#medianObject



17
18
19
# File 'lib/muflax/enumerable.rb', line 17

def median
  self.percentile 0.5
end

#median_by(&block) ⇒ Object



21
22
23
# File 'lib/muflax/enumerable.rb', line 21

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

#percentile(percent) ⇒ Object



25
26
27
# File 'lib/muflax/enumerable.rb', line 25

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

#percentile_by(percent, &block) ⇒ Object



29
30
31
# File 'lib/muflax/enumerable.rb', line 29

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

#rfind(*arg, &block) ⇒ Object



50
51
52
# File 'lib/muflax/enumerable.rb', line 50

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

#shortestObject

find shortest element



8
9
10
# File 'lib/muflax/align.rb', line 8

def shortest
  self.min_by{|s| s.str_length}
end

#to_percentObject



59
60
61
62
# File 'lib/muflax/enumerable.rb', line 59

def to_percent
  sum = self.sum / 100.0
  self.map{|n| (n.to_f / sum).round(1)}
end

#to_ratioObject



54
55
56
57
# File 'lib/muflax/enumerable.rb', line 54

def to_ratio
  sum = self.sum
  self.map{|n| (n.to_f / sum).round(1)}
end

#triangleObject



33
34
35
# File 'lib/muflax/enumerable.rb', line 33

def triangle
  self.to_a.triangle
end

#with_previousObject



64
65
66
# File 'lib/muflax/enumerable.rb', line 64

def with_previous
  self.reduce(nil){|prev, cur| yield prev, cur; cur}; self
end