0

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

4

2 に答える 2

1

group_bysum

まず、次のようなものです。

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 に答える