Sha256: 05d8fa39832687c3df326ad4ce4a6edfcf55eca3e15e1442aade5db15338f3d1

Contents?: true

Size: 1.15 KB

Versions: 2

Compression:

Stored size: 1.15 KB

Contents

class Array
  def sum(identity = 0, &block)
    if block_given?
      map(&block).sum(identity)
    else
      inject(:+) || identity
    end
  end

  def mean
    sum / size
  end

  def median
    sorted = self.sort
    len = sorted.length
    return (sorted[(len - 1) / 2] + sorted[len / 2]) / 2.0
  end

  def compakt
    self.reject do |i|
      i.nil? ||
      (i.respond_to?(:length) && i.length == 0) ||
      (i.respond_to?(:match) && i.match(/^\s+$/))
    end
  end

  def random(num_elements = 1)
    num_elements == 1 ? self[Kernel.rand(size)] : sort_by{ Kernel.rand }.slice(0...num_elements)
  end

  def random_by_frequency(seed = nil)
    self.select{|i| i.is_a?(Hash) }.inject({}) do |memo, item|
      memo[item] = item['frequency'] || item[:frequency] || 0
      memo
    end.random_by_frequency(seed)
  end

  def randomized
    sort_by { rand }
  end

  # Return subarrays of random length between a min and max
  def sections(min_size, max_size)
    sects = []
    offset = 0
    while offset < size
      next_size = (min_size..max_size).random.to_i
      sects << self[offset..offset+next_size]
      offset += next_size + 1
    end

    sects
  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
bootstripe-0.2.23 lib/bootstripe/array_additions.rb
bootstripe-0.2.22 lib/bootstripe/array_additions.rb