如何在select(foreach)中获取前一个元素,例如dic[index -1].Key
new Dictionary<int, double>();
dic.Select(x => x.Value*(x.Equals(dic.FirstOrDefault()) ? x.Key : //x.Key - dic[index -1].Key//)).Sum()
答案 0 :(得分:3)
Select
方法提供索引作为第二个参数。
dic.Select((x, index) => dict[index])
如果要在上一个索引处选择元素,可以使用ElementAt
dic.Select((x, index) => dic.ElementAt(index).Key)
答案 1 :(得分:0)
如果您使用OrderedDictionary
,那么使用直线foreach
可能会更快:
double sum = 0.0;
int prev = 0;
foreach(var kvp in dic)
{
sum += kvp.Value * (kvp.Key - prev);
prev = kvp.Key;
}
在任何情况下,我都会首先提出工作的内容,然后重构它,如果你能使它更好。并且&#34;更好&#34;可能没有使用Linq;在大多数情况下,难以理解和调试的复杂Linq查询比干净,高效的循环更糟糕。