Sha256: a379da33a2ec2c2cf058a6240dd8e39d29f7059c2950baad7067a3e6cecf8622

Contents?: true

Size: 557 Bytes

Versions: 2

Compression:

Stored size: 557 Bytes

Contents

class Array
  def mode
    if self.length <= 1
      return self
    end

    values = Hash[*self.collect { |x| [x, 0] }.flatten]

    self.map{ |x| values[x] += 1 }

    q = values.sort_by{ |key, value| value }.reverse

    if q[0][1] == q[1][1]
      modes = []

      q.each_cons(2) do |pair|
        if !pair[1].nil? and pair[0][1] == pair[1][1]
          modes << pair[0][0]
          modes << pair[1][0]
        else
          break
        end
      end

      modes.uniq.sort
    else
      [q[0][0]]
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rstat-0.0.2 lib/rstat/core_ext/array/mode.rb
rstat-0.0.1 lib/rstat/core_ext/array/mode.rb