处理Hash中的数据

时间:2016-09-05 21:21:29

标签: ruby database hash

我正在尝试为个人财务管理构建一个系统,我希望学习Ruby。

我创建了一个股票<资产。 这包含有关资产的所有信息(当前现货价格等)。 我有我的个人资料,我可以通过buy_price,quantity,date等将资产添加到我的余额中。

我想show_assets_by_code,当我运行此方法时,我希望系统通过我的Assest,然后按代码对此进行分类,并将数量相加,得到包含成本的average_price。并返回:[asset,average_price_with_cost,total_quantity]

现在我可以对资产进行分组:

{"RNGO11"=>
  [{:quantity=>10,
    :buying_price=>75.0,
    :cost=>16.91,
    :date=>2016-09-05 18:06:06 -0300,
    :code=>"RNGO11",
    :asset_id=>18563448},
   {:quantity=>100,
    :buying_price=>75,
    :cost=>16.91,
    :date=>"16/4/2015",
    :code=>"RNGO11",
    :asset_id=>18563448},
   {:quantity=>100,
    :buying_price=>77,
    :cost=>16.91,
    :date=>"16/4/2016",
    :code=>"RNGO11",
    :asset_id=>18563448}],
 "BRCR11"=>
  [{:quantity=>100,
    :buying_price=>75,
    :cost=>16.91,
    :date=>2016-09-05 18:06:06 -0300,
    :code=>"BRCR11",
    :asset_id=>18563316}]}

如何获取信息,并为每个组使用Hash中的数据?

我想要输出:

[RNGO11, quantity: 210, average_price: 76.19]
[BRCR11, quantity: 100, average_price: 75.17]

任何提示?

2 个答案:

答案 0 :(得分:1)

data.map do |key, values|
  quantity = values.map { |entry| entry[:quantity] }.reduce(:+)
  average_price = values.map { |entry| entry[:buying_price] + entry[:cost] }.reduce(:+).to_f / values.size
  { code: key, quantity: quantity, average_price: average_price }
end

如果这对您有用,请告诉我 编辑:考虑增加成本

答案 1 :(得分:0)

感谢Pawel Duda,我做对了!

Object1.transform.position = Vector3.MoveTowards(PosB, PosA, step);
Object2.transform.position = Vector3.MoveTowards(PosA, Posb, step);

如果有人想改进此代码,我会很高兴的! 我闻到了改进但却无法发现它。看起来不干......不可读。 但是,嘿,它正在努力购买和出售资产。 (根据我必须申报的收入联邦税(巴西)。