字典linq选择上一个

时间:2014-12-03 15:22:53

标签: c# linq dictionary

如何在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()

2 个答案:

答案 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查询比干净,高效的循环更糟糕。