var deviation = frequencies.Sum(value => (value.Key * value.Value))
任何人都可以告诉我这笔钱的工作原理吗?
答案 0 :(得分:1)
Sum
是IEnumerable<T>
的扩展方法,是LINQ的一部分。
它遍历集合中的所有元素,并使用传入的Lambda Expression获取每个项目的值。它们将它们相加并返回结果。
答案 1 :(得分:0)
假设frequencies
是Dictionary
,其中包含查看特定数字的次数(即key
是数字,value
是该数字的出现次数),这将遍历字典中的所有键值对,并为每个计算key *值的乘积并将它们全部加起来。 sum方法本身是一个扩展方法,您可以传递一个lambda表达式,该表达式说明了每个项目的添加方式。
答案 2 :(得分:0)
它使用Sum()
LINQ方法。来自MSDN:
计算序列的总和 通过获得的双值 在每个上调用转换函数 输入序列的元素。
它实际上等同于frequencies.Select(value => (value.Key * value.Value)).Sum()
,它遍历列表/字典中的每个项目,并将字典键乘以它所代表的值。然后它将这些计算值中的每一个加在一起。
答案 3 :(得分:0)
它使用lambda表达式 - 请参阅http://msdn.microsoft.com/en-us/library/bb397687.aspx
lambda表达式表示“给定值,我将获取值的值和值的值,并将它们相乘”。 Sum函数可能会将该函数应用于每个频率元素,并将每个计算的结果汇总在一起(我在这里猜测,但没有足够的信息可以告诉)。
答案 4 :(得分:0)
查看Jon Skeet撰写的这篇博文,其中重新实现了Sum:
答案 5 :(得分:0)
我猜频率是IEnumerable,所以Sum方法实际上是this Sum method它的作用是为IEnumerable中的每个元素调用一个方法,方法是:
return value.Key * value.Value;
所以偏差是所有这些值的总和。 (这不是偏差)
答案 6 :(得分:0)
Sum只是在你的案例中迭代一个keyvalue对
var deviation = frequencies.Sum(value => (value.Key * value.Value))
是
的简写var sum = 0.0M; // or 0.0D; // or what ever type?
foreach(var pair in frequencies) {
sum += (pair.Key * pair.Value);
}
答案 7 :(得分:0)
这是我最简单的Sum方法实现
public static class LinqExt
{
public static decimal? MySum<TSource>(this IEnumerable<TSource> list, Func<TSource,decimal?> selector)
{
decimal? result = 0;
foreach (var p in list)
{
result += selector(p);
}
return result;
}
}
它不检查任何异常,并完全信任传入的参数值为true。此外,我会问社区应该如何初始化十进制结果。 你可以使用完全像Sum这样的MySum方法
List<int> values = new List<int>{1,2,3,4};
var sum = values.MySum(x=>x);
这将为您提供列表中所有整数的总和