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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM