使用收集器进行理解并不收集其数据

问题描述 投票:0回答:1

我的理解是,地图实现了收集器协议,因此可以在理解的

into:
部分中使用。为了尝试这个,我编写了以下程序:

lt = [{"ab", "cd", "ef"}, {"x", "y", "z"}]
m = %{}
for c <- lt, into: m do
  IO.puts(length(Map.keys(m)))
  {elem(c,1),elem(c,0)}
end
IO.puts(length(Map.keys(m)))

我预计

m
最后设置为
%{"cd" => "ab", "y" => "x"}
并看到

0
1
2

正在打印,但我打印了三遍

0
。地图里好像什么都没有收集到
m
。为什么?

elixir
1个回答
0
投票

您忘记了变量是不可变的:您需要使用并保留

for
返回的值,
m
将保持为空
map

lt = [{"ab", "cd", "ef"}, {"x", "y", "z"}]
m = %{}
output =
  for c <- lt, into: m do
    {elem(c, 1), elem(c, 0)}
  end
IO.puts(length(Map.keys(output)))
© www.soinside.com 2019 - 2024. All rights reserved.