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