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

 

posted @ 2017-05-31 22:28  HowardZhang  阅读(12617)  评论(0编辑  收藏  举报