如何应用一个带有函数f和2列表l1和l2的map函数,并返回通过将函数依次应用于每个列表中的一个元素而生成的列表?
一些伪代码
function add(a1,a2) {return a1 + a2}
map2(add, [1,2,3], [4,5,6])
这会产生一个列表
[5,7,9]
这是我到目前为止所做的事情
Enum.map(list, fn n -> IO.puts n + Enum.each(list2, fn z -> z end)
答案 0 :(得分:2)
Erlang的lists
模块中有一个函数可以完成此操作:lists:zipwith/3
。但是在Elixir的Enum
模块中没有包装器。
iex(1)> :lists.zipwith(fn a, b -> a + b end, [1, 2, 3], [4, 5, 6])
[5, 7, 9]
fn a, b -> a + b end
可以缩短为引用+
运算符:
iex(2)> :lists.zipwith(&Kernel.+/2, [1, 2, 3], [4, 5, 6])
[5, 7, 9]
答案 1 :(得分:0)
我会首先使用Enum.zip/2
输入,然后应用函数:
iex(1)> defmodule M do
...(1)> def add({a1, a2}), do: a1 + a2
...(1)> end
iex(2)> Enum.zip([1,2,3], [4,5,6]) |> Enum.map(&M.add/1)
#⇒ [5, 7, 9]
或者,使用理解Kernel.SpecialForms.for/1
:
iex(3)> for {i1, i2} <- Enum.zip([1,2,3], [4,5,6]), do: i1 + i2
#⇒ [5, 7, 9]
答案 2 :(得分:0)
通过 Elixir 1.12 的更新,将会有一个 Enum.zip_with/3 函数:
https://github.com/elixir-lang/elixir/blob/master/lib/elixir/lib/enum.ex#L3349