Module: Mode

Defined in:
lib/average/mode.rb

Instance Method Summary collapse

Instance Method Details

#build_hash_result(result) ⇒ Object



19
20
21
# File 'lib/average/mode.rb', line 19

def build_hash_result(result)
  result[:hash_result].select { |key, value| value == result[:max_repetition] }
end

#build_repetition_result(array) ⇒ Object



23
24
25
# File 'lib/average/mode.rb', line 23

def build_repetition_result(array)
   array.inject({}) { |key, value| key[value] = array.count(value.to_f); key }
end

#get_mode(array) ⇒ Object



2
3
4
5
6
7
8
9
10
11
12
13
# File 'lib/average/mode.rb', line 2

def get_mode(array)
  if valid_array?(array)
    result = repetition_hash( clean_array(array) )
    if build_hash_result(result).count > 1
      # It contains more than one mode
      build_hash_result(result).keys.collect { |float| float.to_i }
    else
      # It contains only one mode
      build_hash_result(result).keys.first
    end
  end
end

#get_unique_mode(array) ⇒ Object



27
28
29
30
31
32
# File 'lib/average/mode.rb', line 27

def get_unique_mode(array)
  # only for Ruby versions bigger than 1.8.7 -> http://apidock.com/ruby/v1_8_7_72/Enumerable/max_by
  if valid_array?(array)
    clean_array(array).max_by { |x| clean_array(array).count(x) }
  end
end

#repetition_hash(array) ⇒ Object



15
16
17
# File 'lib/average/mode.rb', line 15

def repetition_hash(array)
  { hash_result: build_repetition_result(array), max_repetition: build_repetition_result(array).values.max }
end