【问题标题】:How to create a map from a comprehension?如何根据理解创建地图?
【发布时间】:2017-09-12 18:44:21
【问题描述】:

我试过了

units = %{}
for s <- squares, u <- unitlist, s in u, do: Map.put(units, s, u)

这似乎不起作用。我想创建一个地图,其中键在正方形中,值在 unitlist 中,并且地图应该只包含那些在 unitlist 中的正方形。

最终,我想要类似的东西

units = for s <- squares, u <- unitlist, s in u, ????

【问题讨论】:

    标签: elixir


    【解决方案1】:

    哪个有效

    该代码不会像您预期的那样工作。它的作用是在每次迭代时创建一个新 Map,但之前声明的 units 映射不会被修改,因为 Elixir 中的变量是不可变的。

    您可以将into 选项与for 一起使用来创建地图。为此,循环体必须返回键和值的 2 元组。

    units = for s <- squares, u <- unitlist, s in u, into: %{}, do: {s, u}
    

    【讨论】:

    • 我查看了into: %{},但我不太明白它是如何工作的。我的理解是for 按列出的顺序执行用逗号分隔的内容,但显然into: %{}do: {s, u} 之后运行并将结果插入到地图中?
    • 哈。我只是在这本出色的cheatsheet 中阅读有关into: %{} 的信息。以为我会有机会回答我的第一个 Elixir 问题一分钟......:D
    • @chx intodo 是宏 for 的普通关键字参数。如果您使用do: 语法,它们出现的顺序并不重要。如果您使用do ... end 块语法,它显然需要在do 之前,因为将它放在之后是语法错误。
    猜你喜欢
    • 2019-05-06
    • 1970-01-01
    • 2015-08-13
    • 1970-01-01
    • 1970-01-01
    • 2018-03-28
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    相关资源
    最近更新 更多