Elixir如何一次迭代两个列表以生成新列表?

Leg*_*ack 1 enumeration elixir

我想一次迭代两个列表,但无法弄清楚如何.for循环,允许你有多个列表作为循环嵌套,我不熟悉Enum,但也许有一个解决方案.

Python有zip(list_1,list_2)enumerate(list_1)做到这一点

在Tcl对我来说更容易:

% foreach var1 [list 1 3] var2 [list 2 4] {
    puts "$var1 $var2"
  }
1 2
3 4
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何在Elixir中做到这一点.

我想这样做的原因是因为我有这样的地图列表

[%{"a" => "1539", "b" => "300"},
 %{"a" => "4095", "b" => "0"},
 %{"a" => "5371", "b" => "0"},
 %{"a" => "7524", "b" => "0"},
 %{"a" => "8267", "b" => "27"}]
Run Code Online (Sandbox Code Playgroud)

我有一个相同大小的项目列表:

["a","b","c","d","e"]
Run Code Online (Sandbox Code Playgroud)

如果地图中的某个元素是某个条件(不是0),我想通过循环一起运行它们来替换地图中的项目:

[%{"a" => "a", "b" => "300"},   # notice the change in element "a"
 %{"a" => "4095", "b" => "0"},
 %{"a" => "5371", "b" => "0"},
 %{"a" => "7524", "b" => "0"},
 %{"a" => "e", "b" => "27"}]    # notice the change in element "a"
Run Code Online (Sandbox Code Playgroud)

无论如何.有人可以帮助我理解可枚举或如何迭代elixir中的两个列表吗?

She*_*yar 5

您可以使用Enum.zip/2Enum.map/2Elixir完成同样的事情:

list_of_maps
|> Enum.zip(list_of_items)
|> Enum.map(fn {map, item} -> 
   if (map["b"] == "0"), do: map, else: Map.put(map, "a", item)
end)
Run Code Online (Sandbox Code Playgroud)