在管道

时间:2018-05-23 20:16:29

标签: tuples elixir pipeline

我希望能够在管道中提取元组的第N项,而不使用with或以其他方式分解管道。除了元组不是枚举之外,Enum.at才能完美运行。

这是一个激励人心的例子:

colors = %{red: 1, green: 2, blue: 3}
data = [:red, :red, :blue]
data 
|> Enum.map(&Map.fetch(colors, &1))
|> Enum.unzip

这会返回{[:ok, :ok, :ok], [1, 1, 3]},让我们说我只想提取[1, 1, 3]

(对于这个特定情况,我可以使用fetch!,但是对于我不存在的实际代码。)

我可以加上

|> Tuple.to_list
|> Enum.at(1)

有没有更好的方法可以不需要在每个元组中创建一个临时列表?

2 个答案:

答案 0 :(得分:13)

使用Kernel.elem/2

iex(1)> {[:ok, :ok, :ok], [1, 1, 3]} |> elem(1)
[1, 1, 3]

答案 1 :(得分:0)

模式匹配可以提供帮助

{ _status, required_value } = 
  data 
    |> Enum.map(&Map.fetch(colors, &1))
    |> Enum.unzip

您可以忽略_status