我有一个记录清单:
list_clients = [{name = "c6"; number = 9}; {name = "c12"; number = 3}; {name = "c17"; number = 6};]
我想简单地将每条记录的所有“数字”相加。
什么是最好的方法?我是 OCaml 的初学者。
使用折叠:
List.fold_left (fun acc nxt -> nxt.number+acc) 0 list_clients
这将获取列表中的每个元素,获取所述元素的“数字”字段,并将其添加到迄今为止的总数中,并传递结果。
关于查尔斯马什的答案的更多解释。
List.fold_left : ('a -> 'b -> 'a) -> 'a -> 'b list -> 'a
接受一个函数f
、一个元素a
和一个列表[b1; b2; ...; bn]
并计算f (... (f (f a b1) b2) ...) bn
。它允许您轻松计算列表元素的总和:List.fold_left (+) 0 l
、其最大元素:List.fold_left max (List.hd l) l
或您需要遍历列表中每个元素的任何内容,并将其与先前的结果聚合。