如何在Erlang中比较两个地图的值。 [我的解决方案未返回任何值]

时间:2018-06-19 15:13:56

标签: functional-programming erlang

compare(M1, M2) -> 
    Map1 = maps:from_list(M1)
    Map2 = maps:from_list(M2)
    Keys1 = maps:keys(Map1)
    lists:foreach(fun(I) -> 
                  V1 = maps:get(I, Map1)
                  V2 = maps:get(I, Map2)
                  if V1 < V2 -> true;
                  true -> false end
                  end, Keys1).

这是我的方法。但我总是在输出中确定。 我在这里想念什么? 条件:两个地图中的键都相同。 例如,这就是我要执行的方式

compare([{p1, 1},{p2, 3}], [{p1, 4}, {p2, 5}]
  • M1中的值应小于M2,如果不是,则返回false。

2 个答案:

答案 0 :(得分:0)

lists:foreach忽略传递的函数返回的值。您可以在此处使用lists:all/2,并从传递的函数中返回V1 < V2。如果所有V1都小于V2,它将返回true,否则返回false

lists:all(fun(I) -> 
    V1 = maps:get(I, Map1)
    V2 = maps:get(I, Map2)
    V1 < V2
  end, Keys1).

答案 1 :(得分:0)

此外,您可以尝试使用列表推导(如果要比较列表而不是地图)

List1 = [{p1, 1},{p2, 3}],
List2 = [{p1, 4}, {p2, 5}],

Result = [Val < Val2 || {Key, Val} <- List1, {Key2, Val2} <- List2].

结果将是:

[true,true,true,true]