使用重复的产品名称映射数据时的求和值和合并数据

时间:2017-01-16 17:42:58

标签: ruby-on-rails postgresql

我们正在映射数据,以便快速将API转储保存到数据库中。

但是,有些项目会列出两次,所以我们如何相互增加它们的价值呢?

例如,我们获得的位置有两次“CASH”的股票代码,它们的值为20和30.我们只想保存“CASH”一次,值为50。

 final_data = import_positions.map do |position|
  [
    portfolio_quovo_idnum(position.portfolio),
    position.id,
    get_asset(position),
    stock_ticker_symbol(position.ticker),
    position.cost_basis,
    position.cost_basis_type,
    position.fxrate,
    position.last_purchase_date,
    position.market_code,
    position.price * 100,
    position.quantity.to_d,
    position.sector,
    position.security_type,
    position.ticker_name,
    position.value * 100,
    get_portfolio_makeup(position),
    get_user_makeup(position)
  ]
end

1 个答案:

答案 0 :(得分:0)

value_sum = Hash.new(0)
import_positions.each do |position|
  value_sum[position.ticker_name] += position.value
end

这将为您提供总计值的哈希值。然后:

final_data = import_positions.uniq{|p| p.ticker_name}.map do |position|
  [
    portfolio_quovo_idnum(position.portfolio),
    position.id,
    ...
    position.ticker_name,
    value_sum[position.id] * 100,
    ...
  ]
end