gpt4 book ai didi

c# - 如何计算积分?

转载 作者:行者123 更新时间:2023-11-30 16:59:41 24 4
gpt4 key购买 nike

如何从返回一系列(时间|值)对的 Linq 表达式构建“积分”函数?

例如我的 Linq 表达式生成(日期|数量)对列表:

var quantities = db.Stocks.Find(id).Trades.Select(
x => new
{
date = x.Price.Date.Subtract(unix).TotalMilliseconds,
value = x.Quantity
}).ToList();

什么是获取一系列(日期 | 累计数量)的有效方法,其中每条记录都包含截至该点的所有数量加上当前数量?

EDIT1 - 使其具体化:上述查询返回的内容可能是

  • 0: (01.01.2012 | 10)
  • 1: (01.01.2013 | -5)
  • 2:(2014 年 1 月 1 日 | 7)

我正在寻找的是在每个离散时间点获得累积值:

  • 0: (01.01.2012 | 10)
  • 1: (01.01.2013 | 5)
  • 2:(2014 年 1 月 1 日 | 12)

EDIT2 - 一种解决方案可能是“手动”组合结果并将每个数量链接到其前身的数量:

var cumulatedQuantities = new List<Tuple<double, double>>();
cumulatedQuantities.Add(new Tuple<double, double>(quantities[0].date, quantities[0].value));
for (var i = 1; i <= quantities.Count - 1; i++ )
{
cumulatedQuantities.Add(new Tuple<double, double>(quantities[i].date, quantities[i].value + cumulatedQuantities[i-1].Item2));
}

不知何故,这感觉很丑陋......但它有效。

最佳答案

按日期分组,然后合计每组的数量:

var quantities
= db.Stocks.Find(id).Trades
.GroupBy(x => x.Price.Date)
.Select(x => new
{
date = x.Key.Subtract(unix).TotalMilliseconds,
value = x.Sum(y => y.Quantity)
})
.ToList();

您也可以将其存储在字典中:

var quantities
= db.Stocks.Find(id).Trades
.GroupBy(x => x.Price.Date)
.ToDictionary(x => x.Key, x => x.Sum(y => y.Quantity));

鉴于您对问题的澄清,这将起作用:

var totalQty = 0;
var cumulatedQuantities =
db.Stocks.Find(id).Trades
.Select(t => new KeyValuePair<int, int>(t.Id, totalQty += t.Quantity)).ToList();

关于c# - 如何计算积分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23450582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com