2016-08-06 29 views
0
category_urls = [ 
    "https://thepiratebay.org/browse/100/0/3", 
    "https://thepiratebay.org/browse/200/0/3", 
    "https://thepiratebay.org/browse/300/0/3", 
    "https://thepiratebay.org/browse/400/0/3", 
    "https://thepiratebay.org/browse/500/0/3", 
    "https://thepiratebay.org/browse/600/0/3" 
] 
result = 
    category_urls 
    |> Enum.map(fn category_url -> 
    1..50 
    |> Enum.map(fn i -> String.replace(category_url, "/0/", "/#{i}/") end) 
    end) 

Ich versuche, eine Karte von Urls ich kriechen müssen zu erzeugen.Wie flachte ich eine Karte der Saitenkarte in Elixir ab?

Der obige Code erzeugt eine Karte der Karte der Zeichenfolgen für mich. Ich würde es gerne auf eine einfache Karte von Streichern reduzieren.

Wie kann ich dies in Elixir erreichen?

Antwort

2

Verwenden Sie Enum.flat_map/2.

category_urls = [ 
    "https://thepiratebay.org/browse/100/0/3", 
    "https://thepiratebay.org/browse/200/0/3", 
    "https://thepiratebay.org/browse/300/0/3", 
    "https://thepiratebay.org/browse/400/0/3", 
    "https://thepiratebay.org/browse/500/0/3", 
    "https://thepiratebay.org/browse/600/0/3" 
] 
result = 
    category_urls 
    |> Enum.flat_map(fn category_url -> 
    1..50 
    |> Enum.map(fn i -> String.replace(category_url, "/0/", "/#{i}/") end) 
    end) 
    end 

Obwohl, verwenden comprehension würde der Code viel einfacher machen.

for i <- 1..6, j <- 1..50, do: "https://thepiratebay.org/browse/#{i}00/#{j}/3"