有一段时间不写博文了,是自己不学习了么,怪不得感觉自己寂寞空虚冷了呢。。。
今天看了一篇文章,心想还有这么简便的方法,呵呵,以后不用再foreach了,又可以偷懒了。。。。
Enumerable 静态类的LINQ扩展方法可以做到这一点 。就像之前大多数的LINQ扩展方法一样,这些是基于IEnumerable <TSource>序列的操作。
所以得做引用: System.Linq;
Sum - 返回序列的总和
源类型必须是以下类型之一: int,float, long,double,decimal,single 或这些类型的可空变种(int?,float?, long?, double?…)
private float[] num = new float[]{25.2f,41,30,12,14};
float sum = num.Sum(); // sum = 122.2
还要注意的是,你可以操作上面这些类型允许Null 的可空值变种。但用SUM()时我们不用担心,因为所有的空值在求和时都排除了 :
private float?[] num = new float?[]{25.2f,41,30,12,14,null};
float sum = num.Sum(); // sum = 122.2
Average - 返回序列的平均值
private int[] num = new int[]{25,41,30,12,14};
float average = num.Average(); // average = 24.4
Average()方法,就Sum()一样,只不过它是用总和除以实际涉及到的项目数。涉及到的是什么意思?请记住,Sum()不包括空值 。Average()是将所有非null值求平均。例如:
private int?[] num = new int?[]{25,41,30,12,14,null};
float average = num.Average(); // average = 24.4
Min - 返回序列的最小值
private int[] num = new int[]{25,41,30,12,14};
float min = num.Min(); // min = 12
Min()支持几乎任何类型,只要该类型实现IComparable或IComparable <T>。因此,它是不限制的数值类型,可以用于任何比较的对象(包括像值类型的DateTime,TimeSpan):
float min = num.Min(); // min = -9
Max - 返回序列的最大值
private int[] num = new int[]{25,41,30,12,14};
float max = num.Max(); // max = 41
其他方面,请参考Min()。
Aggregate - 序列自定义的累加器
private int[] num = new int[]{25,41,30,12,14};
int result = num.Aggregate((total,next) => total * next); // 25*41*30*12*14 = 5166000
private int[] num = new int[]{25,41,30,12,14};
int result= num.Select((i, j) => i - j).Sum(); // (25-0) + (41-1) + (30-2) + (12-3) + (14-4) = 122
四个简单的和两个可能有点复杂的,这一组功能相当强大!这些方法可以很容易地对序列进行聚合,使你不需要进行循环和自己计算。
很方便吧。。。。。。。
(有什么不对不全的地方还请不吝赐教)
参考文章:http://www.cnblogs.com/multiplesoftware/archive/2011/08/27/2155268.html