【问题标题】:Iterating over list of tuples in elixir using Enum使用枚举迭代 elixir 中的元组列表
【发布时间】:2019-03-20 09:06:08
【问题描述】:

我正在尝试通过 Enum.map 遍历元组列表。

coordinates = [{0,0},{1,0},{0,1}]
newcoordinates = Enum.map(coordinates,fn({X,Y})->{X+1,Y+1})

此代码无效。我该怎么做?

【问题讨论】:

    标签: list tuples elixir enumeration


    【解决方案1】:

    首先,您在函数声明后缺少end。其次,在 Elixir 中,以大写字母开头的标识符是原子,小写字母是变量,不像 Erlang 中大写字母是变量,小写字母是原子。所以你只需要把它们变成小写:

    iex(1)> coordinates = [{0, 0},{1, 0},{0, 1}]
    [{0, 0}, {1, 0}, {0, 1}]
    iex(2)> newcoordinates = Enum.map(coordinates, fn {x, y} -> {x + 1, y + 1} end)
    [{1, 1}, {2, 1}, {1, 2}]
    

    【讨论】:

    • 谢谢,大写是问题所在。缺少结尾是一个错字。感谢您清除它。
    【解决方案2】:

    你也可以使用comprehensions:

    for {x, y} <- [{0,0},{1,0},{0,1}], do: {x+1, y+1}
    

    理解是枚举的语法糖,所以相当于使用Enum

    【讨论】:

    • FWIW,推导式不是语法糖,它们是transpiled into beams on their own。理解中的过滤器和多个子句无法通过普通枚举实现
    • 很有趣,谢谢。尽管我链接到的官方指南说它们是语法糖:“在 Elixir 中,循环遍历 Enumerable 是很常见的,通常会过滤掉一些结果并将值映射到另一个列表中。理解是此类构造的语法糖:它们将那些常见的特殊形式的任务”
    • “这样的结构”≠“枚举”:)
    • 关于写多个不带特殊形式的从句,我在这里问了一个问题:stackoverflow.com/questions/50653654/…
    • 只有在理解中有过滤器/守卫时才有可能。
    猜你喜欢
    • 2018-08-13
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    • 2011-02-07
    • 2021-01-02
    • 2017-05-11
    • 2015-03-24
    • 2018-08-29
    相关资源
    最近更新 更多