Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir如何一次迭代两个列表以生成新列表?_Elixir_Enumeration - Fatal编程技术网

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

Elixir如何一次迭代两个列表以生成新列表?,elixir,enumeration,Elixir,Enumeration,我想一次迭代两个列表,但不知道如何迭代。for循环允许您将多个列表作为for循环的嵌套,我对Enum不太熟悉,但可能有一个解决方案 Python有zip(list\u 1,list\u 2)和enumerate(list\u 1)来实现这一点 在Tcl中,对我来说更容易: % foreach var1 [list 1 3] var2 [list 2 4] { puts "$var1 $var2" } 1 2 3 4 但我想不出用长生不老药怎么做 我想这样做的原因是因为我有一个这样的

我想一次迭代两个列表,但不知道如何迭代。for循环允许您将多个列表作为for循环的嵌套,我对
Enum
不太熟悉,但可能有一个解决方案

Python有
zip(list\u 1,list\u 2)
enumerate(list\u 1)
来实现这一点

在Tcl中,对我来说更容易:

% foreach var1 [list 1 3] var2 [list 2 4] {
    puts "$var1 $var2"
  }
1 2
3 4
但我想不出用长生不老药怎么做

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

[%{"a" => "1539", "b" => "300"},
 %{"a" => "4095", "b" => "0"},
 %{"a" => "5371", "b" => "0"},
 %{"a" => "7524", "b" => "0"},
 %{"a" => "8267", "b" => "27"}]
我有一个相同大小的项目列表:

["a","b","c","d","e"]
如果映射中的某个元素处于特定条件(不是0),我希望通过循环将它们一起运行,以替换映射中的项目:

无论如何。有人能帮我理解enumerable或如何在elixir中迭代两个列表吗?

您可以使用和在elixir中完成同样的事情:

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)
或者,使用:

用于{map,item}item}

您是否查看了或文档?它们都有一个zip函数。如果我们在地图列表中有一个
结构,比如说
[%User{…},%User{…},]
,然后我们运行这个,我会得到一个没有结构的地图列表
[%{…},%{…},]
。。。如何在整个过程中维护结构(
%User{…}
)?
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)
for {map, item} <- Enum.zip(list_of_maps, list_of_items),
  into: [],
    do: if (map["b"] == "0"), do: map, else: %{map | "a" => item}