我有一组 model 实例Foo
。Foo
是基于欧姆的数据存储。Foo
has和 integer 属性的每个实例,an_id
例如follows
, likes
。如果有两个Foo
with same 的实例an_id
,我很乐意将follows
andlikes
属性加在一起。我的解决方案是创建一个散列,其中每个键都是an_id
数组的一个,并将状态保留在那里。如果数组足够大,这效率不高,因为我需要将每个对象放回数组中。我很想将数组分组Foo#an_id
并将计数器属性合并/添加在一起,然后将其弹出回数组中。目前支持这样的东西吗?
问问题
2578 次
2 回答
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 => {:follows => 2, :likes => 4}, 2 => ...
另外,看看:
(5..10).inject {|sum, n| sum + n } # 45
于 2013-02-25T04:23:18.060 回答
0
您可以使用inject
来获取值的总和:
array = *array of Foo*
total = array.inject { |sum, x| sum + x.likes }
于 2013-02-25T04:23:23.320 回答