将列表的列表转换为元组的列表

问题描述 投票:0回答:1

我有一份清单

ll = [["ab", "cd", "ef"], ["x", "y", "z"]]

我想从中得到一个元组列表,

[{"ab", "cd", "ef"}, {"x", "y", "z"}]

当然我可以通过理解来做到这一点,

lt=[]
for le <- ll, into: lt do
  List.to_tuple(le)
end

但是有没有更“实用”的方法来做到这一点?我试过了

lt = List.map(ll, fn(le) -> List.to_tuple(le) end) # NOT POSSIBLE!

但我得到一个 UndefinedFunctionError。确实,

List
好像没有
map
功能。

elixir
1个回答
0
投票

在 Elixir 中,许多标准函数式编程助手都在

Enum
模块中,例如
Enum.map/2

lt = Enum.map(ll, fn le -> List.to_tuple(le) end)
#    ^^^^ (not List)

由于您直接调用单参数函数作为要映射的对象,因此您可以直接传递对该函数的引用,而不是将其包装在 lambda 中。

lt = Enum.map(ll, &List.to_tuple/1)

最后,在某些情况下,使用管道语法可能是惯用的。如果原始列表是另一个函数的返回值,或者您需要对结果进行一些后处理,则尤其如此。管道的左侧作为第一个参数传递给右侧的函数调用。

lt = ll |> Enum.map(&List.to_tuple/1)
© www.soinside.com 2019 - 2024. All rights reserved.