如果我有一个球列表,每个球都有一个颜色属性。我怎样才能清楚地得到颜色最频繁的球的列表。
[m1,m2,m3,m4]
说,
m1.color = blue
m2.color = blue
m3.color = red
m4.color = blue
[m1,m2,m4]
是颜色最频繁的球的列表
我的做法是:
[m1,m2,m3,m4].group_by{|ball| ball.color}.each do |samecolor|
my_items = samecolor.count
end
其中计数定义为
class Array
def count
k =Hash.new(0)
self.each{|x|k[x]+=1}
k
end
end
my_items 将是每个相同颜色组的频率散列。我的实现可能有问题,我觉得必须有更好、更聪明的方法。 有什么想法吗?
最佳答案
您找到了 group_by
但错过了 max_by
max_color, max_balls = [m1,m2,m3,m4].group_by {|b| b.color}.max_by {|color, balls| balls.length}
关于ruby - 使用 Ruby 的数组中对象的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2462609/