Elixir 枚举映射时,如何编写传递给Enum.map的函数?

Elixir 枚举映射时,如何编写传递给Enum.map的函数?,elixir,Elixir,以下内容会引发错误 iex(121)> val_map = %{"pri" => %{"tit" => "name1"}} iex(122)> fp = fn (new_map) -> Map.get(new_map, "pri") end 当您在地图上迭代时,它会将其转换为关键字列表(即使用元组): 在您的情况下,需要匹配元组的键部分: Enum.each %{a: 1, b: 2, c: 3}, fn {key, value} -> IO.put

以下内容会引发错误

iex(121)> val_map = %{"pri" => %{"tit" => "name1"}}
iex(122)> fp = fn (new_map) -> Map.get(new_map, "pri") end

当您在地图上迭代时,它会将其转换为关键字列表(即使用元组):

在您的情况下,需要匹配元组的
部分:

Enum.each  %{a: 1, b: 2, c: 3},  fn {key, value} ->
  IO.puts "#{key} : #{value}"
end 
在第二部分中,您可以对该值执行其他操作:转换、不返回它,等等

在这种情况下,它将从初始映射返回一组映射(值):

val_map = %{"pri" => %{"tit" => "name1"}}
fp = fn ({"pri", value}) -> value; {other_key, value} -> value end

很难从您的代码中分辨出您的目标是什么,也许您只是在试验
Enum
,但这里可能是更好的选择

iex(1)>val_map=%{“pri”=>%{“tit”=>“name1”},“sec”=>%{“tat”=>“name2”}
%{“pri”=>%%{“tit”=>“name1”},“sec”=>%%{“tat”=>“name2”}
iex(2)>地图值(val_地图)
[%{“tit”=>“name1”},%{“tat”=>“name2”}]
回应评论中的澄清,您可以这样做:

iex(1)>val_-map=%%{“pri”=>%%{“tit”=>“name1”},“sec”=>%%{“tit”=>“name2”}
%{“pri”=>%%{“tit”=>“name1”},“sec”=>%%{“tit”=>“name2”}
iex(2)>Enum.map(val_-map,fn{k,%%{“tit=>v}}}->%{k=>v}end)
[%{“pri”=>“name1”},%{“sec”=>“name2”}]

目标是获取键“tit”val\u map=%%{“pri”=>%%{“tit”=>“name1”},“sec”=>%%{“tit”=>“name2”}的值,因此最终结果应该如下所示:[%{“pri”=>“name1”},%%“sec”=>“name2”}@navyad:
Enum.map(val\tit map,fn{k,%%“tit”=>v}->end)
val_map = %{"pri" => %{"tit" => "name1"}}
fp = fn ({"pri", value}) -> value; {other_key, value} -> value end
Enum.each(val_map, fp)
# [%{"tit" => "name1"}]