如何在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()
Select
方法提供一个索引作为第二个参数。
dic.Select((x, index) => dict[index])
如果要在上一个索引处选择一个元素,可以使用ElementAt
dic.Select((x, index) => dic.ElementAt(index).Key)
如果您
使用OrderedDictionary
那么使用直foreach
可能会更快:
double sum = 0.0;
int prev = 0;
foreach(var kvp in dic)
{
sum += kvp.Value * (kvp.Key - prev);
prev = kvp.Key;
}
无论如何,我会首先想出一些有用的东西,然后重构它,如果你能让它变得更好。 而"更好"可能不是使用 Linq;在大多数情况下,难以理解和调试的复杂 Linq 查询比干净、高效的循环更糟糕。