【问题标题】:Extract the second element of a tuple in a pipeline提取管道中元组的第二个元素
【发布时间】:2018-11-02 22:33:21
【问题描述】:

我希望能够提取管道中元组的第 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)

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

【问题讨论】:

    标签: tuples elixir pipeline


    【解决方案1】:

    使用Kernel.elem/2:

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

    【讨论】:

    • 啊,我像往常一样想太多了。谢谢
    【解决方案2】:

    模式匹配可以提供帮助

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

    你可以忽略_status

    【讨论】:

    • 我应该澄清一下,extract 步骤位于管道的中间。使用模式匹配(也是我的首选方式),最终需要中间变量和多个管道:(
    猜你喜欢
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多