Elixir如何一次迭代两个列表以生成新列表?
我想一次迭代两个列表,但不知道如何迭代。for循环允许您将多个列表作为for循环的嵌套,我对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 但我想不出用长生不老药怎么做 我想这样做的原因是因为我有一个这样的
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}