2011-04-17 163 views
-1
var deviation = frequencies.Sum(value => (value.Key * value.Value)) 

谁能告诉我这个总和是如何工作的?c#计算金额

+8

是。文档可以告诉你。 – SLaks 2011-04-17 19:07:19

+3

未来,请您只要Google它,或者如果您无法理解Google的结果,请粘贴*更多代码*,以便我们确定我们正在查看的内容。一条线是不够的! – 2011-04-17 19:09:45

+1

顺便说一句,你应该接受更多的答案... – digEmAll 2011-04-17 19:20:57

回答

1

Sum是LINQ的一部分IEnumerable<T>的扩展方法。

它会遍历集合中的所有元素,并使用传递的Lambda Expression来获取每个项目的值。他们总结它们并返回结果。

0

假设frequencies是含有特定数目已经看到的次数的Dictionary(即key是多少,value是出现计数该号码),这将去了所有的键 - 值对的字典和为每个计算关键*值的乘积并将它们总和起来。 sum方法本身是一个扩展方法,您可以传递一个lambda表达式来说明应该如何添加每个项目。

0

它使用Sum() LINQ方法。从MSDN

计算可以由 调用输入序列中的每个 元素的转换函数而获得的 Double值序列的总和。

它实际上等同于frequencies.Select(value => (value.Key * value.Value)).Sum(),它覆盖列表/字典中的每个项目,并将字典关键字与它所表示的值相乘。然后它将这些计算值中的每一个加起来。

0

它使用lambda表达式 - 见http://msdn.microsoft.com/en-us/library/bb397687.aspx

Lambda表达式说“给定值,我将采取值的键和值的价值,以及它们相乘”。 Sum函数可能会将该函数应用于每个频率元素并将每个计算结果相加在一起(我在这里猜测,但没有足够的信息可以说明)。

0

我猜的频率是一个IEnumerable如此之和方法实际上是this Sum method它所做的是调用一个方法在每个元素IEnumerable和方法是:

return value.Key * value.Value; 

所以偏差是所有这些值的总和。 (这不是偏差)

0

总和刚刚通过的情况下,集合的键值对

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); 
} 
0

这里短手数总和法的我简单的实现

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。此外,我会问社区应该如何初始化小数结果。 可以使用MySum方法酷似点心e.g

List<int> values = new List<int>{1,2,3,4}; 
var sum = values.MySum(x=>x); 

这会给你的所有整数的总和列表