如何获得在所选择的(的foreach)先前元件一些这样dic[index -1].Key
字典LINQ选择先前
new Dictionary<int, double>();
dic.Select(x => x.Value*(x.Equals(dic.FirstOrDefault()) ? x.Key : //x.Key - dic[index -1].Key//)).Sum()
如何获得在所选择的(的foreach)先前元件一些这样dic[index -1].Key
字典LINQ选择先前
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)
以及如何你会用这个问题吗? 'dict [index]'不会选择“第n个”项;它会返回'index'是关键字的值。 – 2014-12-03 15:28:05
但是如何访问密钥,因为字典[索引]。(仅限数值) - 我的字典包含例如:23,10.00; 150,56.7;我需要得到确切的关键 – AleksP 2014-12-03 15:34:14
@AleksP我已经更新了答案。事实上,我认为只需要一个普通的'for'循环就可以轻松完成。 – 2014-12-03 15:36:35
如果使用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查询比干净,高效的循环更糟糕。
字典无序。 'FirstOrDefault()'在这里无法正常工作。 – SLaks 2014-12-03 15:25:30
你能扩展你的答案并告诉我们为什么你需要这样做吗?它会帮助我们帮你 – 2014-12-03 15:25:35
字典没有订单。如果你使用了'OrderedDictionary',那么'foreach'可能会更清洁,因为你需要跟踪“最后一个”键。 – 2014-12-03 15:26:04