Elixir - comprehensions
Elixir - comprehensions
第一次学习Elixir,作为一个笔记记录一下学习过程,内容中均为自己的理解,存在理解有误的地方,请指出,谢谢!
comprehension基础使用
- 功能:允许我们快速构建一个可枚举的或是位串的数据结构。
- 返回值:默认返回List,通过配置参数可以返回其他类型,后面会介绍
- 基本的使用方法
#A list generator: iex> for n <- [1, 2, 3, 4], do: n * 2 [2, 4, 6, 8] # for Bitstring iex> pixels = <<213, 45, 132, 64, 76, 32, 76, 0, 0, 234, 32, 15>> iex> for <<r::8, g::8, b::8 <- pixels>>, do: {r, g, b} iex> [{213, 45, 132}, {64, 76, 32}, {76, 0, 0}, {234, 32, 15}] # A comprehension with two generators for x <- [1, 2], y <- [2, 3], do: x * y [2, 3, 4, 6]
n <- [1, 2, 3, 4]
,[1, 2]
,[2, 3]
都是generator, do后面是执行方法,即对可枚举元素的操作 - 支持参数过滤,使用方法如下:
# A comprehension with a generator and 筛选出对2求余为0的元素 iex> for n <- [1, 2, 3, 4, 5, 6], rem(n, 2) == 0, do: n [2, 4, 6]# 筛选出type不等于guest的值 iex> users = [user: "john", admin: "meg", guest: "barbara"] iex> for {type, name} when type != :guest <- users do ...> String.upcase(name) ...> end ["JOHN", "MEG"]
options
Comprehension共有3个配置参数
:into: 修改comprehension的返回值类型, example:
into: %{}
修改返回类型为map:uniq: 保证返回数据中元素的唯一性, example:
uniq: true
# into 、 uniq的使用 iex> for <<x <- "abcabc">>, uniq: true, into: "", do: <<x - 32>> "ABC"
reduce: 与
Enum.reduce/3
的使用方法和功能相同#reduce的使用 iex> for <<x <- "AbCabCABc">>, x in ?a..?z, reduce: %{} do ...> acc -> Map.update(acc, <<x>>, 1, & &1 + 1) ...> end %{"a" => 1, "b" => 2, "c" => 1}
reduce:%{}
, %{}是Map.update函数累加器accumulator的初始值
for <<x <- "AbCabCABc">>, x in ?a..?z
,筛选后的结果是reduce函数要操纵的List
官网学习地址:
Elixir学习地址- hexdoc
elixir-lang
感谢,有问题大家交流!
Elixir - comprehensions相关推荐
- [elixir! #0007] [译] 理解Elixir中的宏——part.5 重塑AST by Saša Jurić
上一章我们提出了一个基本版的deftraceable宏,能让我们编写可跟踪的函数.宏的最终版本有一些剩余的问题,今天我们将解决其中的一个--参数模式匹配. 今天的练习表明我们必须仔细考虑宏可能接收到的 ...
- Elixir: 多太(Polymorphism)
概述 多态(Polymorphism)按字面的意思就是"多种状态". 在面向对象语言中, 接口的多种不同的实现方式即为多态. 多态性是允许你将父对象设置成为一个或更多的他的子对象相 ...
- [elixir! #0043] 精确到 1bit 的字符串处理
在 elixir 中, 可以使用模式匹配来精确地处理字符串. 1 byte(字节) = 8 bit(比特), 1 bit 在 elixir 中表现为 <<0~255>>. 长度 ...
- Elixir 1.2带来多项功能增强和性能提升
José Valim宣布了Elixir这门动态.函数式编程语言的1.2版本. \\ Valim是Elixir的创建者.他表示,1.2版本"带来了功能增强.Bug修复.性能提升等等" ...
- 使用 Elixir 开发嵌入式系统: 使用DS18B20传感器测量体温
文本, 我会使用一个Elixir实现的模块函数去读取连接到树莓派的DS18B20温度传感器的温度数值. 文本假设你熟悉 数字电路基础 Elixir编程基础 视频演示 https://v.qq.com/ ...
- Elixir: 开发和发布Elixir库
创建 Elixir 项目 $ mix new simple_statistics $ cd simple_statistics $ mix test Mix 生成了如下目录结构 |-- _build ...
- elixir官方入门教程 模式匹配
为什么80%的码农都做不了架构师?>>> #模式匹配 1. 匹配操作符 2. 模式匹配 3. 标记操作符 在本章,我们将展示在Elixir中=号实际上是匹配操作符,以及如何使用 ...
- Elixir 1.3带来新的语言功能、API和改进后的工具
José Valim最近宣布Elixir 1.3中弃用了必要赋值,添加了一些新的类型和存取器,提升了其Mix搭建工具和ExUnit单元测试框架. \\ Elixir 1.3弃用了对需要在外部作用域进行 ...
- pythonlist特性_python 高级特性:List Comprehensions(列表生成式)
列表生成式: 创建List 格式: 新列表 = [表达式/函数 for 变量 in 旧列表] 一.普通创建List #!/usr/bin/python #common establish way li ...
最新文章
- 如何把PB程序的数据库从ASA迁移到ASE?
- Failed to initialize NSS library
- 利用U盘进行软件加密(转)
- 【PAT乙级】1071 小赌怡情 (15 分)
- (web前端笔记)2020-12-23(http)
- 为什么Java中类方法不能访问实例方法
- 文件系统位于服务器,如何访问hadoop文件系统上的文件,该文件系统位于与本地计算机不同的服务器上?...
- JDK源码(12)-Enum
- 拿不出双十一成绩单,垂直电商何以安身立命?
- c语言 int类型转换为string类型
- VMware Explore 大会解读:VMware 要做多云时代核心技术玩家
- ae怎么设置gpu渲染_AE怎么开启影驰GTX750 GPU显卡加速?AE渲染开启GPU设置教程
- IDEA设置护眼背景及字体大小
- ro服务器物品掉率修改,洪水世界如何调整物品爆率 物品掉率修改方法解析
- Redis设计与实现笔记2
- 图数据库Neo4j技术原理探秘
- Linux网络项目实验------网络架构(DNS域名解析、NFS共享服务、LAMP服务、搭建论坛、PXE自动装机)
- Centos登录日志 last和lastb命令整理
- Echarts 地图使用,以及tooltip轮播使用
- ubuntu安装和启动redis命令步骤及其配置文件redis.conf