Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

frequency of objects in an array using Ruby

Tags:

arrays

ruby

If i had a list of balls each of which has a color property. how can i cleanly get the list of balls with the most frequent color.

[m1,m2,m3,m4]

say,

        m1.color = blue
        m2.color = blue
        m3.color = red
        m4.color = blue

[m1,m2,m4] is the list of balls with the most frequent color

My Approach is to do:

[m1,m2,m3,m4].group_by{|ball| ball.color}.each do |samecolor|
  my_items = samecolor.count
end

where count is defined as

class Array
  def count
  k =Hash.new(0)
  self.each{|x|k[x]+=1}
  k
  end
end

my_items will be a hash of frequencies foreach same color group. My implementation could be buggy and i feel there must be a better and more smarter way. any ideas please?

like image 288
eastafri Avatar asked Dec 08 '22 03:12

eastafri


1 Answers

You found group_by but missed max_by

max_color, max_balls = [m1,m2,m3,m4].group_by {|b| b.color}.max_by {|color, balls| balls.length}
like image 164
glenn jackman Avatar answered Dec 23 '22 09:12

glenn jackman