我有一组模型Foo
的实例。 Foo
是一个基于欧姆的数据存储。 Foo
的每个实例都有an_id
和整数属性,例如follows
,likes
。如果有两个Foo
实例具有相同的an_id
,我很乐意将follows
和likes
属性添加到一起。我的解决方案是创建一个散列,其中每个键都是数组的an_id
,并保持状态。如果数组足够大,这是无效的,因为我需要将每个对象重新放回到数组中。我希望通过Foo#an_id
对数组进行分组,并将计数器属性合并/添加到一起,然后将其弹回到数组中。目前是否支持此类内容?
答案 0 :(得分:1)
首先,这样的事情:
grouped_hash = your_array.group_by(&:an_id)
sums_by_id = {}
grouped_hash.each do |id,values|
sums_by_id[id] = {}
# you could also just iterate over values once and += :follows and :likes
sums_by_id[id][:follows] = values.sum(&:follows)
sums_by_id[id][:likes] = values.sum(&:likes)
end
示例输出: sums_by_id => {1 => {:follow => 2,:likes => 4},2 => ...
另外,请看一下:
(5..10).inject {|sum, n| sum + n } # 45
答案 1 :(得分:0)
您可以使用inject
获取值的总和:
array = *array of Foo*
total = array.inject { |sum, x| sum + x.likes }