fold
この問題に対する適切な (または map、reduce などの) スタイルの解決策があるかどうか疑問に思っています。
購入のコレクション (order_items) を提供します。各製品/SKU の合計を収集したいと考えています。
コレクションの例:
[{sku: "A", price:10},
{sku: "B", price:5},
{sku: "C", price:2},
{sku: "B", price:5},
{sku: "A", price:10},
{sku: "B", price:5}]
そして、次の結果を取得します。
{"A":20, "B":15, "C":2}
現在、私は次のようにしています:
aggregate = order_items.each_with_object({}){|i,o|
o[i[:sku]] ||= 0
o[i[:sku]] += i[:price]
}
これは私が望むものを私に与えますが、これを行うためのよりエレガントな方法があるかどうか知りたいですか?
明らかに、単一の SKU に事前にフィルター処理すると、従来のreduce
ie を実行できます。
# assuming sku is a flat array of values for a single sku type...
aggregate_sku = sku.reduce(:+)
ただし、元のコレクションを事前にフィルター処理する必要はありません。これを達成する方法はありますか、それともすでに可能な限りのことをしていますか?
どんな助けでも大歓迎です。
質問を明確にするために編集されました。締めくくりに投票する必要がある場合は、まずコメントを投稿してください。明確にすることができます。
サブテキスト: などに機能 (またはより可能性の高い手法) があるかどうかmap
はreduce
わかりません。まだ理解していません。ありがとうございます。