elixir - 9 . 使用Enum.map , pipe operator, stream

栏目: 编程语言 · 发布时间: 7年前

内容简介:参考:iex(2)> Enum.map([1,2,3], fn x -> x * 2 end )[2, 4, 6]

参考: https://elixir-lang.org/getting-started/enumerables-and-streams.html

iex(2)> Enum.map([1,2,3], fn x -> x * 2 end )

[2, 4, 6]

iex(3)> Enum.map(%{ 1 => 3, 5 => 27}, fn {k,v} -> k * v end )

[3, 135]

iex(4)> [1,2,3]

> Enum.map( (1..9), fn x -> 2*x + 1 end )

[3, 5, 7, 9, 11, 13, 15, 17, 19]

odd? = &( rem(&1, 2) != 0)  # 这里定义了取偶数的方法。 可以看出 &( ... ) 中的代码,默认是 返回 boolean

iex >  Enum.filter( 5..9, odd?)     # 这里可以看出, Enum.filter 接受两个参数。 第二个是一个fn

[5, 7, 9]

)> total_sum = 1..300 |> Enum.map(fn(x) -> x + 3 end) |> Enum.filter(&( rem(&1, 2) == 0))

[4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42,

44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82,

84, 86, 88, 90, 92, 94, 96, 98, 100, 102, ...]

Stream.  每次pipe 返回的不是一个List(不是一个方法结果),而是使用Stream对传入的数据进行的处理。

iex(30)> 1..100_000

1..100000

iex(31)> 1..100_000 |> Stream.map(&(&1 * 3))

#Stream<[enum: 1..100000, funs: [#Function<49.117072283/1 in Stream.map/2>]]>

iex(32)> 1..100_000 |> Stream.map(&(&1 * 3)) |> Stream.filter(&(rem(&1, 2) == 0))

#Stream<[

enum: 1..100000,

funs: [#Function<49.117072283/1 in Stream.map/2>,

#Function<41.117072283/1 in Stream.filter/2>]

]>

iex(33)> 1..100_000 |> Stream.map(&(&1 * 3)) |> Stream.filter(&(rem(&1, 2) == 0)) |> Enum.sum

7500150000

Stream特别适合 大数据的计算,例如 无限长 , 无限大的结果。 (到 pipe operator的最后一刻才知道多大)


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

激荡十年,水大鱼大

激荡十年,水大鱼大

吴晓波 / 中信出版社 / 2017-11-1 / CNY 58.00

【编辑推荐】 知名财经作者吴晓波新作,畅销十年、销量超过两百万册的《激荡三十年》续篇,至此完成改革开放四十年企业史完整记录。 作为时代记录者,吴晓波有意识地从1978年中国改革开放伊始,记录中国翻天覆地的变化和对我们影响至深的人物与事件,串成一部我们每个人的时代激荡史。而最新的这十年,无疑更壮观,也更扑朔迷离。 很多事情,在当时并未有很深很透的感受,回过头来再看,可能命运的轨迹就......一起来看看 《激荡十年,水大鱼大》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具