我有一份清单
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
功能。
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)