假设我有一个这样的数组:
["white", "red", "blue", "red", "white", "green", "red", "blue", "white", "orange"]
我想遍历数组并创建一个新数组,其中包含每个单独的颜色及其在原始数组中出现的次数。
因此,在新数组中,它将报告“白色”出现了3次,“蓝色”出现了2次,依此类推...
我该如何做到这一点?
假设我有一个这样的数组:
["white", "red", "blue", "red", "white", "green", "red", "blue", "white", "orange"]
def arr_times(arr)
arr.inject(Hash.new(0)) { |h,n| h[n] += 1; h }
end
counts = Hash.new(0)
colors.each do |color|
counts[color] += 1
end
result = {}
hash = array.group_by{|item| item}.each{|key, values| result[key] = values.size}
p result
我看到你给这个问题打了ruby-on-rails的标签。
如果这是一个数据库模型/列(例如,带有颜色属性的用户模型),你应该在数据库中进行计算:
User.count(:all,:group=>:color).sort_by {|arr| -arr[1]}
sort_by {|color, count| -count}
即可获得按计数递减排序的数组。 - sepp2k