モデルのインスタンスの配列がありますFoo
。Foo
オームベースのデータストアです。の各インスタンスにFoo
はan_id
、、などの整数属性follows
がありますlikes
。Foo
同じのインスタンスが2つある場合は、属性と属性を一緒an_id
に追加したいと思います。私が持っていた解決策は、各キーが配列のであるハッシュを作成し、そこに状態を保持することでした。配列が十分に大きい場合、各オブジェクトを配列に戻す必要があるため、これは効率的ではありません。配列をグループ化し、カウンター属性をマージ/追加して、配列にポップバックしたいと思います。このようなものは現在サポートされていますか?follows
likes
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 に答える