Elixir 如何一次迭代两个列表以生成一个新列表?
Elixir how to iterate over two lists at once to produce a new list?
我想一次遍历两个列表,但不知道如何做。 for 循环允许您将多个列表用作嵌套 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
但我不知道如何在 Elixir 中做到这一点。
我想这样做的原因是因为我有一个像这样的地图列表
[%{"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):
[%{"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"
无论如何。有人可以帮助我理解可枚举的或如何在 elixir 中迭代两个列表吗?
您可以在 Elixir 中使用 Enum.zip/2
and Enum.map/2
来完成同样的事情:
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)
或者,使用 comprehension:
for {map, item} <- Enum.zip(list_of_maps, list_of_items),
into: [],
do: if (map["b"] == "0"), do: map, else: %{map | "a" => item}
我想一次遍历两个列表,但不知道如何做。 for 循环允许您将多个列表用作嵌套 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
但我不知道如何在 Elixir 中做到这一点。
我想这样做的原因是因为我有一个像这样的地图列表
[%{"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):
[%{"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"
无论如何。有人可以帮助我理解可枚举的或如何在 elixir 中迭代两个列表吗?
您可以在 Elixir 中使用 Enum.zip/2
and Enum.map/2
来完成同样的事情:
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)
或者,使用 comprehension:
for {map, item} <- Enum.zip(list_of_maps, list_of_items),
into: [],
do: if (map["b"] == "0"), do: map, else: %{map | "a" => item}