我希望能够在不使用with或以其他方式破坏管道的情况下提取管道中元组的第N个项目。 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)


是否有更好的方法可以做到,而无需在每个元组中创建一个临时列表?

最佳答案

使用Kernel.elem/2

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

关于tuples - 在管道中提取元组的第二个元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50496783/

10-16 10:41