使用Ruby的数组中对象的频率

eas*_*fri 4 ruby arrays

如果我有一个球列表,每个球都有颜色属性.我怎样才能干净地获得最常用颜色的球列表.

[m1,m2,m3,m4]
Run Code Online (Sandbox Code Playgroud)

说,

        m1.color = blue
        m2.color = blue
        m3.color = red
        m4.color = blue
Run Code Online (Sandbox Code Playgroud)

[m1,m2,m4] 是最常见颜色的球的列表

我的方法是:

[m1,m2,m3,m4].group_by{|ball| ball.color}.each do |samecolor|
  my_items = samecolor.count
end
Run Code Online (Sandbox Code Playgroud)

其中count被定义为

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

my_items将是一个相同颜色组的频率哈希值.我的实施可能是错误的,我觉得必须有一个更好,更聪明的方式.有什么想法吗?

gle*_*man 5

你发现group_by但错过了max_by

max_color, max_balls = [m1,m2,m3,m4].group_by {|b| b.color}.max_by {|color, balls| balls.length}
Run Code Online (Sandbox Code Playgroud)