如何解决如何在Ocaml中解决此Dictionary问题?
在得到元组列表[("x",3); ("num",17); ("y",7); ("x",5)]
之后,创建一个字典,如果有相等的键,则将它们的值相加。因此,在此示例中,应创建这样的字典
[("x",8); ("num",7)];
与字典的顺序无关。
这是我尝试的代码:
module MS = Map.Make(String);;
let f l = List.fold_left (fun acc (key,value) -> MS.add key value acc) MS.empty l;;
let f1 = f [("x",5)];;
MS.bindings f1;;
但是它会不断覆盖相同键的值(输出为[("num",17); ("x",5); ("y",7)]
)
解决方法
您要查找Map的update
函数,而不是add
:
module MS = Map.Make(String)
let f l =
List.fold_left
(fun acc (key,value) ->
MS.update key (function Some v -> Some (value + v) | None -> Some value) acc)
MS.empty l
let f1 = f [("x",3); ("num",17); ("y",7); ("x",5)]
对于此版本,MS.bindings f1
将返回[("num",17); ("x",8); ("y",7)]
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。