提取管道中元组的第二个元素
Extract the second element of a tuple in a pipeline
我希望能够在不使用 with
或以其他方式破坏管道的情况下提取管道中元组的第 N 项。 Enum.at
除了元组不是枚举这一事实外可以完美地工作。
这是一个激励人心的例子:
colors = %{red: 1, green: 2, blue: 3}
data = [:red, :red, :blue]
data
|> Enum.map(&Map.fetch(colors, &1))
|> Enum.unzip
这个 returns {[:ok, :ok, :ok], [1, 1, 3]}
假设我只想提取 [1, 1, 3]
(对于这种特定情况,我可以使用 fetch!
,但对于我不存在的实际代码。)
我可以补充
|> Tuple.to_list
|> Enum.at(1)
是否有不需要从每个元组创建临时列表的更好方法?
iex(1)> {[:ok, :ok, :ok], [1, 1, 3]} |> elem(1)
[1, 1, 3]
模式匹配可以提供帮助
{ _status, required_value } =
data
|> Enum.map(&Map.fetch(colors, &1))
|> Enum.unzip
您可以忽略_status
。
我希望能够在不使用 with
或以其他方式破坏管道的情况下提取管道中元组的第 N 项。 Enum.at
除了元组不是枚举这一事实外可以完美地工作。
这是一个激励人心的例子:
colors = %{red: 1, green: 2, blue: 3}
data = [:red, :red, :blue]
data
|> Enum.map(&Map.fetch(colors, &1))
|> Enum.unzip
这个 returns {[:ok, :ok, :ok], [1, 1, 3]}
假设我只想提取 [1, 1, 3]
(对于这种特定情况,我可以使用 fetch!
,但对于我不存在的实际代码。)
我可以补充
|> Tuple.to_list
|> Enum.at(1)
是否有不需要从每个元组创建临时列表的更好方法?
iex(1)> {[:ok, :ok, :ok], [1, 1, 3]} |> elem(1)
[1, 1, 3]
模式匹配可以提供帮助
{ _status, required_value } =
data
|> Enum.map(&Map.fetch(colors, &1))
|> Enum.unzip
您可以忽略_status
。