提取管道中元组的第二个元素

Ani*_*ift 9 pipeline tuples elixir

我希望能够在管道中提取元组的第N项,而不使用with或以其他方式分解管道.Enum.at除了元组不是枚举这一事实外,它会完美地工作.

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

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

这回来了{[:ok, :ok, :ok], [1, 1, 3]},假设我只想提取[1, 1, 3]

(对于这种特殊情况,我可以使用,fetch!但对于我不存在的实际代码.)

我可以补充一下

|> Tuple.to_list
|> Enum.at(1)
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点,不需要从每个元组创建一个临时列表?

Dog*_*ert 20

用途Kernel.elem/2:

iex(1)> {[:ok, :ok, :ok], [1, 1, 3]} |> elem(1)
[1, 1, 3]
Run Code Online (Sandbox Code Playgroud)