Erlang映射:获取具有相同值的键

Erlang映射:获取具有相同值的键,erlang,maps,Erlang,Maps,我有一个{H,VV}对,我想将这对与映射的其余部分进行比较,以找到具有相同值的其他键 我试过这个: check(H,Map)-> VV=maps:get(H,Map), Fun = fun(K,V) when H =/= K, V=:=VV-> io:format("~p~p~n",[H,K]) end, maps:map(Fun,Map). 它编译但引发错误“function_子句” 有什么办法可以实现吗?传递给map:map/2的函数既不处理H键,也不处理任

我有一个{H,VV}对,我想将这对与映射的其余部分进行比较,以找到具有相同值的其他键

我试过这个:

check(H,Map)->
  VV=maps:get(H,Map),
  Fun = fun(K,V) when H =/= K, V=:=VV->
  io:format("~p~p~n",[H,K])
  end,
  maps:map(Fun,Map).
它编译但引发错误“function_子句”


有什么办法可以实现吗?

传递给
map:map/2
的函数既不处理
H
键,也不处理任何不等于
VV
的值。请尝试以下方法:

check(H,Map)->
    VV=maps:get(H,Map),
    Fun = fun(K,V) when H =/= K, V=:=VV->
                 io:format("~p:~p~n",[H,K]),
                 V;
             (_,V) -> V
          end,
    maps:map(Fun,Map).
不过,对于这种情况,我认为最好使用
maps:fold/3
,因为您不想创建新的贴图,而只是想知道与
H
具有相同值的其他键。考虑下面的方法:

check(H, Map) ->
    VV = maps:get(H,Map),
    maps:fold(fun(K,V,Acc) when K /= H, V =:= VV ->
                     [K|Acc];
                 (_,_,Acc) ->
                     Acc
              end, [], Map).

此版本返回与
Map
中的
H
值相同的键列表。传递到
Map:Map/2
的函数不处理
H
键,也不处理任何不等于
VV
的值。请尝试以下方法:

check(H,Map)->
    VV=maps:get(H,Map),
    Fun = fun(K,V) when H =/= K, V=:=VV->
                 io:format("~p:~p~n",[H,K]),
                 V;
             (_,V) -> V
          end,
    maps:map(Fun,Map).
不过,对于这种情况,我认为最好使用
maps:fold/3
,因为您不想创建新的贴图,而只是想知道与
H
具有相同值的其他键。考虑下面的方法:

check(H, Map) ->
    VV = maps:get(H,Map),
    maps:fold(fun(K,V,Acc) when K /= H, V =:= VV ->
                     [K|Acc];
                 (_,_,Acc) ->
                     Acc
              end, [], Map).

此版本返回与
Map

中的
H
值相同的键列表,也有列表理解解决方案:

VV = maps:get(H,Map),
[ K || K <- maps:keys(Map), K =/= H, VV =:= maps:get(K, Map) ].
VV=Map:get(H,Map),

[K | | K这方面也有列表理解解决方案:

VV = maps:get(H,Map),
[ K || K <- maps:keys(Map), K =/= H, VV =:= maps:get(K, Map) ].
VV=Map:get(H,Map),

[K | | K调用函数时传入的参数是什么?“H”是具有值VV的键;我想在“Map”中找到具有相同值“VV”的其他键您将遍历整个映射,因此最终将点击
H
键。但是您的函数不处理该键。调用函数时传入的参数是什么?“H”是具有值VV的键;我想在“map”中找到具有相同值“VV”的其他键您将浏览整个地图,因此最终将点击
H
键。但是您的函数不处理该键。