在单个列表中合并Enum.map响应

时间:2018-02-01 08:46:34

标签: elixir

在以下示例中,我Enum.map列表,根据某些条件,我可以收到单个项目或项目列表。 如果我只收到一个项目,我将结束列表。 但是,如果我还收到另一个列表,我会找到一个嵌套列表。

defmodule TestQuery do

  def build_query() do
    Enum.map(["test1", "test2", "hello"], fn item ->
      query(item)
    end)
  end

  def query(item) do
    case String.contains? item, "test" do
      true -> 1
      false -> [2, 3]
    end
  end

end

iex(2)> TestQuery.build_query
[1, 1, [2, 3]]

如何将false上的列表输出合并为一个列表? [1,1,2,3]

true中查询我查询一个项目并在false我查询多个项目,但我想将它们加入到同一个列表中。

1 个答案:

答案 0 :(得分:2)

将您的build_query/0重写为:

def build_query() do
  ["test1", "test2", "hello"] # this is a style change only
  |> Enum.map(fn item -> query(item) end)
  |> List.flatten # here's the thing that make this list flat
end

查看List.flatten上的文档:https://hexdocs.pm/elixir/List.html#flatten/1