如何编写Elixir映射函数,以便可以在每个列表中添加项目?

时间:2017-10-22 06:24:44

标签: algorithm mapping elixir

如何应用一个带有函数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)

3 个答案:

答案 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

相关问题