用Elixir pipeine和Enum将数据放入列表中。

问题描述 投票:0回答:1

下午好,我有一个模块可以从链接中获取域名。我有一个模块,从链接中获取域名。

defmodule URIparser do
  defstruct domains: []
  def make_domain(uri) do
    case URI.parse(uri) do
      %URI{authority: nil} -> URI.parse("http://#{uri}")
      %URI{authority: _} -> URI.parse(uri)
    end
  end
end

之后我使用管道,得到我需要的域名。

links = ["https://www.google.com/search?newwindow=1&sxsrf", "https://stackoverflow.com/questions/ask", "yahoo.com"]
Enum.each(links, fn(x) -> URIparser.make_domain(x) |> Map.take([:authority]) |> Map.values |> IO.inspect end)

这就是最后发生的事情。

["google.com"]
["stackoverflow.com"]
["yahoo.com"]
:ok

请告诉我们如何补充流水线 并把所有域名放到一个列表里 也可以采用其他的解决方案。

举个例子。

%{domains: ["google.com", "stackoverflow.com", "yahoo.com"]}
enums elixir pipeline
1个回答
1
投票

而不是 Enum.eachMap.take,使用 Enum.mapMap.get

Enum.map(links, fn x ->
  x
  |> URIparser.make_domain()
  |> Map.get(:authority)
end)
© www.soinside.com 2019 - 2024. All rights reserved.