0

我有一组 model 实例FooFoo是基于欧姆的数据存储。Foohas和 integer 属性的每个实例,an_id例如follows, likes。如果有两个Foowith same 的实例an_id,我很乐意将followsandlikes属性加在一起。我的解决方案是创建一个散列,其中每个键都是an_id数组的一个,并将状态保留在那里。如果数组足够大,这效率不高,因为我需要将每个对象放回数组中。我很想将数组分组Foo#an_id并将计数器属性合并/添加在一起,然后将其弹出回数组中。目前支持这样的东西吗?

4

2 回答 2

1

group_by ,总和

首先,是这样的:

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 回答