如何在Rails数组中获取某个值的实例数量?

3

假设我有一个这样的数组:

["white", "red", "blue", "red", "white", "green", "red", "blue", "white", "orange"]

我想遍历数组并创建一个新数组,其中包含每个单独的颜色及其在原始数组中出现的次数。
因此,在新数组中,它将报告“白色”出现了3次,“蓝色”出现了2次,依此类推...
我该如何做到这一点?
4个回答

6
更好的做法是返回一个哈希值...
def arr_times(arr)
  arr.inject(Hash.new(0)) { |h,n| h[n] += 1; h }
end

4
counts = Hash.new(0)
colors.each do |color|
    counts[color] += 1
end

好的,这看起来不错。我该如何按从大到小的顺序打印出计数哈希的值? - Michael Berkompas
@Micheal:只需在结果哈希上使用 sort_by {|color, count| -count} 即可获得按计数递减排序的数组。 - sepp2k
很棒,你的解决方案比我找到的更简洁。 - Michael Berkompas

1
result = {}
hash = array.group_by{|item| item}.each{|key, values| result[key] = values.size}
p result

1

我看到你给这个问题打了ruby-on-rails的标签。

如果这是一个数据库模型/列(例如,带有颜色属性的用户模型),你应该在数据库中进行计算:

 User.count(:all,:group=>:color).sort_by {|arr| -arr[1]}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接