首页 > 代码库 > C#数组的Map、Filter、Reduce等价方法

C#数组的Map、Filter、Reduce等价方法

在Javascript、Python等语言里,MapFilterReduce是数组的常用方法,可以让你在实现一些数组操作时告别循环,具有很高的实用价值。它们三个的意义大家应该都清楚,有一个十分形象的解释如下:

 

技术分享

 

然而,支持lambda表达式的C#也有类似的方法,但不是这样命名的。实现IEnumerable接口的类(如List、HashSet、继承Array的类等)都有如下等价方法:

  1. “Map” => Select方法
  2. “Filter” => Where方法
  3. “Reduce” => Aggregate方法

 

用法示例如下:

class SuperClass{    public int Value { get; set; }    public SuperClass(int value)    {        this.Value =http://www.mamicode.com/ 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);    }}

 

C#数组的Map、Filter、Reduce等价方法