Elixir:我怎样才能在列表中找到子列表的产品?

时间:2017-02-17 21:11:29

标签: list enums mapping elixir

例如,如果我有一个findProduct的函数参数([[1,2,3],[1,5,6]])我怎样才能找出2个子列表的乘积然后将它们添加到新结果列表[6,30]?

2 个答案:

答案 0 :(得分:2)

productFn = fn(list) -> Enum.reduce(list,  &*/2) end 
my_list = [[1, 2, 3], [1, 5, 6]]
Enum.map(my_list, productFn) # => [6, 30]

如果您不熟悉&运算符(more info here):

productFn = fn(list) -> Enum.reduce(list,  &*/2) end
#is equivalent to:
productFn = fn(list) -> Enum.reduce(list, fn(item, acc) -> item * acc end) end

Enum.map(list, productFn)
is equivalent to:
Enum.map(list, fn(item) -> productFn.(item) end)

答案 1 :(得分:0)

您可以使用Enum.reduce/2使用累加器缩减每个列表,然后使用这两个元素返回新列表:

defmodule MyProduct do                       
  def findProduct(list_of_lists) do                   
    Enum.map(list_of_lists, fn(list) -> Enum.reduce(list, fn(x, acc) -> x * acc end) end)                                       
  end
end