如何在 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。

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).

您也可以尝试使用列表推导(如果您想比较列表而不是地图(

List1 = [{p1, 1},{p2, 3}],
List2 = [{p1, 4}, {p2, 5}],
Result = [Val < Val2 || {Key, Val} <- List1, {Key2, Val2} <- List2].

结果将是:

[true,true,true,true]

相关内容

最新更新