计算每日收益的 Equity Analytics(股票)对象列表。正在考虑必须有一个成对的解决方案来做到这一点:
for(int i = 0; i < sdata.Count; i++){
sdata[i].DailyReturn = (i > 0) ? (sdata[i-1].AdjClose/sdata[i].AdjClose) - 1
: 0.0;
}
LINQ代表:“语言集成查询”。
LINQ 不应该使用并且几乎不能用于分配,LINQ 不会更改给定的 IEnumerable 参数,而是创建一个新参数。
正如下面评论中所建议的那样,有一种方法可以使用 LINQ创建一个新的 IEnumerable,它会更慢,而且可读性也会差很多。
尽管 LINQ 很好,但重要的是要知道何时不使用它。
只需使用旧的 for 循环。
我是 LINQ 的新手,我开始使用它是因为 stackoverflow,所以我尝试解决您的问题,我知道这可能会吸引反对票,但我尝试过并且它可以满足您的要求,以防列表中至少有一个元素.
sdata[0].DailyReturn = 0.0;
sdata.GetRange(1, sdata.Count - 1).ForEach(c => c.DailyReturn = (sdata[sdata.IndexOf(c)-1].AdjClose / c.AdjClose) - 1);
但必须说避免 for 循环不是最佳实践。从我的角度来看,LINQ 应该在方便的地方使用,而不是无处不在。好的旧循环有时更容易维护。