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

标签 ruby arrays

如果我有一个球列表,每个球都有一个颜色属性。我怎样才能清楚地得到颜色最频繁的球的列表。

[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/

相关文章:

C++:如何在堆栈上创建对象数组?

java - 按下按钮时生成随机句子,代码看起来正确但不起作用

javascript - 使用 window.prompt() 在 javascript 中创建一个数组

ruby-on-rails - Ruby Geocoder 如何设置最小.near距离

ruby-on-rails - 在 Ruby 中编译 Assets 是否需要在部署时完成?为什么之前不呢?

ruby - 续集:如何获取数据集列的数据类型

c - 从 C 数组中删除重复的单词/字符串

C++字符串修改,不通过引用传递?

ruby-on-rails - Ruby/Rails 调试 : Break when a value of an object/variable changes

ruby-on-rails - 未找到 Ruby gems,但已安装