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相关推荐

  1. [elixir! #0007] [译] 理解Elixir中的宏——part.5 重塑AST by Saša Jurić

    上一章我们提出了一个基本版的deftraceable宏,能让我们编写可跟踪的函数.宏的最终版本有一些剩余的问题,今天我们将解决其中的一个--参数模式匹配. 今天的练习表明我们必须仔细考虑宏可能接收到的 ...

  2. Elixir: 多太(Polymorphism)

    概述 多态(Polymorphism)按字面的意思就是"多种状态". 在面向对象语言中, 接口的多种不同的实现方式即为多态. 多态性是允许你将父对象设置成为一个或更多的他的子对象相 ...

  3. [elixir! #0043] 精确到 1bit 的字符串处理

    在 elixir 中, 可以使用模式匹配来精确地处理字符串. 1 byte(字节) = 8 bit(比特), 1 bit 在 elixir 中表现为 <<0~255>>. 长度 ...

  4. Elixir 1.2带来多项功能增强和性能提升

    José Valim宣布了Elixir这门动态.函数式编程语言的1.2版本. \\ Valim是Elixir的创建者.他表示,1.2版本"带来了功能增强.Bug修复.性能提升等等" ...

  5. 使用 Elixir 开发嵌入式系统: 使用DS18B20传感器测量体温

    文本, 我会使用一个Elixir实现的模块函数去读取连接到树莓派的DS18B20温度传感器的温度数值. 文本假设你熟悉 数字电路基础 Elixir编程基础 视频演示 https://v.qq.com/ ...

  6. Elixir: 开发和发布Elixir库

    创建 Elixir 项目 $ mix new simple_statistics $ cd simple_statistics $ mix test Mix 生成了如下目录结构 |-- _build ...

  7. elixir官方入门教程 模式匹配

    为什么80%的码农都做不了架构师?>>>    #模式匹配 1. 匹配操作符 2. 模式匹配 3. 标记操作符 在本章,我们将展示在Elixir中=号实际上是匹配操作符,以及如何使用 ...

  8. Elixir 1.3带来新的语言功能、API和改进后的工具

    José Valim最近宣布Elixir 1.3中弃用了必要赋值,添加了一些新的类型和存取器,提升了其Mix搭建工具和ExUnit单元测试框架. \\ Elixir 1.3弃用了对需要在外部作用域进行 ...

  9. pythonlist特性_python 高级特性:List Comprehensions(列表生成式)

    列表生成式: 创建List 格式: 新列表 = [表达式/函数 for 变量 in 旧列表] 一.普通创建List #!/usr/bin/python #common establish way li ...

最新文章

  1. 如何把PB程序的数据库从ASA迁移到ASE?
  2. Failed to initialize NSS library
  3. 利用U盘进行软件加密(转)
  4. 【PAT乙级】1071 小赌怡情 (15 分)
  5. (web前端笔记)2020-12-23(http)
  6. 为什么Java中类方法不能访问实例方法
  7. 文件系统位于服务器,如何访问hadoop文件系统上的文件,该文件系统位于与本地计算机不同的服务器上?...
  8. JDK源码(12)-Enum
  9. 拿不出双十一成绩单,垂直电商何以安身立命?
  10. c语言 int类型转换为string类型
  11. VMware Explore 大会解读:VMware 要做多云时代核心技术玩家
  12. ae怎么设置gpu渲染_AE怎么开启影驰GTX750 GPU显卡加速?AE渲染开启GPU设置教程
  13. IDEA设置护眼背景及字体大小
  14. ro服务器物品掉率修改,洪水世界如何调整物品爆率 物品掉率修改方法解析
  15. Redis设计与实现笔记2
  16. 图数据库Neo4j技术原理探秘
  17. Linux网络项目实验------网络架构(DNS域名解析、NFS共享服务、LAMP服务、搭建论坛、PXE自动装机)
  18. Centos登录日志 last和lastb命令整理
  19. Echarts 地图使用,以及tooltip轮播使用
  20. ubuntu安装和启动redis命令步骤及其配置文件redis.conf

热门文章

  1. java学习第109天,p665-676(05/07),12集干的漂亮
  2. 什么是可变参数列表?以及可变参数列表是如何实现的?
  3. mysql经典46_50个经典SQL语句
  4. 不借助工具清除Windows7密码
  5. Spring Data JPA-根据Repository接口关键字生成SQL
  6. 人工智能:语音识别技术介绍
  7. 网络爬虫框架Scrapy简介
  8. gvim 6.3 的确不错.
  9. 【单片机】在用STC-ISP烧录程序过程中,一直显示“正在检测单片机”的解决办法
  10. grep、cut常见用法