在Javascript、Python等语言里,Map、Filter和Reduce是数组的常用方法,可以让你在实现一些数组操作时告别循环,具有很高的实用价值。它们三个的意义大家应该都清楚,有一个十分形象的解释如下:
然而,支持lambda表达式的C#也有类似的方法,但不是这样命名的。实现IEnumerable接口的类(如List、HashSet、继承Array的类等)都有如下等价方法:
- “Map” => Select方法
- “Filter” => Where方法
- “Reduce” => Aggregate方法
用法示例如下:
class SuperClass { public int Value { get; set; } public SuperClass(int value) { this.Value = value; } } class ClassA : SuperClass { public ClassA(int value) : base(value) { } } static class Test { static void test() { var list1 = new List<SuperClass>() { new SuperClass(0), //元素0 new SuperClass(1), //元素1 new SuperClass(2), //元素2 }; //Select,结果为{元素0, 元素1, 元素2},类型为List<ClassA> List<ClassA> list2 = list1.Select(e => e as ClassA).ToList(); //Where,结果为{元素1, 元素2},类型为List<ClassA> List<ClassA> list3 = list2.Where(e => e.Value > 0).ToList(); //Aggregate,结果为3,类型为int int sum = list3.Aggregate(0, (acc, e) => acc += e.Value); } }