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);
    }
}
时间: 2024-10-12 08:28:43

C#数组的Map、Filter、Reduce等价方法的相关文章

Swift详解之五-----------map,filter,reduce

map,filter,reduce 注:本文为作者自己总结,过于基础的就不再赘述 ,都是亲自测试的结果.如有错误或者遗漏的地方,欢迎指正,一起学习. 关于Swift 中String .数组 .字典的基本用法这里就不再赘述了,这些都很简单 不会的 在用得时候baidu下就行了.这里主要看下这几个高阶函数 map map方法,其获取一个闭包表达式作为其唯一参数. 数组中的每一个元素调用一次该闭包函数,并返回该元素所映射的值(也可以是不同类型的值). 具体的映射方式和返回值类型由闭包来指定. 当提供给

Python中map,filter,reduce的应用

事例1: l=[('main', 'router_115.236.xx.xx', [{'abc': 1}, {'dfg': 1}]), ('main', 'router_183.61.xx.xx', [{'abc': 0}, {'dfg': 1}]), ('main', 'router_52.11.xx.xx', [{'abc': 0}, {'dfg': 1}]), ('main', 'router_183.17.xx.xx', [{'abc': 1}, {'dfg': 1}]) ] 检查参数l

聊一聊数组的map、reduce、foreach等方法

聊聊数组遍历方法 JS 数组的遍历方法有好几个: every some filter foreach map reduce 接下来我们来一个个地交流下. every() arr.every(callback[, thisArg]) 返回值:true | false 是否改变原数组:不改变原数组 解析: every() 方法用来测试数组中的每一项是否都通过了callback函数的测试:只有全部通过才返回 true:否则 false. 本文出现的 callback 没有特别声明都是表示包含 elem

3.python中map,filter,reduce以及内部实现原理剖析

一.map函数,对任何可迭代序列中的每一个元素应用对应的函数.(不管处理的是什么类型的序列,最后返回的都是列表.) 作用已经在标题中介绍过了,那么先来说说map函数的用法吧. map(处理逻辑可以是函数也可以是lambda表达式,可迭代的序列) 现在有一个列表. l1 = [1,2,3,4,5] 现在需要给这个列表里的每一个元素都+1.(当然,使用for循环可以做到对序列中的每个元素进行处理,但使用map函数会更加方便.) 首先,定义一个逻辑函数,要如何对序列中的每一个元素进行处理. def p

Python lambda map filter reduce

lambda可以理解为一个小的匿名函数,lambda函数可以使用任意数量的参数,但只能有一个表达式模板: lambda argument: manipulate(argument)参数:argument就是这个匿名函数传入的参数,冒号后面是我们对这个参数的操作方法numbers = [1,2,3,4,5]add_one = list(map(lambda n:n + 1,numbers))print(list(add_one))[2, 3, 4, 5, 6] map()map()函数的主要作用是

lambda,map,filter,reduce

lambda 编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数.返回一个函数对象. func = lambda x,y:x+y func相当于 def func(x,y): return x+y l = lambda x: x[0] if x else '' 可以直接调l对列表进行处理 map,reduce,filter中的function都可以用lambda表达式来生成 map map函数会根据提供的函数对指定序列做映射. m

关于数组的map、reduce、filter

map:map()方法定义在Array中,传入自己的参数,就得到一个新的Array作为结果 var aqiData = [ ["北京", 90], ["上海", 50], ["福州", 10], ["广州", 50], ["成都", 90], ["西安", 100]]; function box(arr){ return arr[1]+'分';}alert(aqiData.map(box

js中map,forEach,filter,reduce等方法是ECMAScript5 Array新增方法

数组在各个编程语言中的重要性不言而喻,但是在之前的JavaScript中数组(JavaScript 数组详解)虽然功能已经很强大,但操作方法并不完善,在ECMAScript5中做了适当的补充. Array.isArray(element) 这是Array对象的一个静态函数,用来判断一个对象是不是数组 var a = new Array(123); var b = new Date(); console.log(Array.isArray(a)); //true console.log(Array

python几个特别函数map filter reduce lambda

lambda函数也叫匿名函数,即,函数没有具体的名称.先来看一个最简单例子: def f(x): return x**2 print f(4) Python中使用lambda的话,写成这样 g = lambda x : x**2 print g(4) lambda表达式在很多编程语言都有对应的实现.比如C#: var g = x => x**2 Console.WriteLine(g(4)) 那么,lambda表达式有什么用处呢?很多人提出了质疑,lambda和普通的函数相比,就是省去了函数名称