4

我有一个记录清单:

list_clients = [{name = "c6"; number = 9}; {name = "c12"; number = 3}; {name = "c17"; number = 6};]

我想简单地将每条记录的所有“数字”相加。

什么是最好的方法?我是 OCaml 的初学者。

4

2 回答 2

6

使用折叠:

List.fold_left (fun acc nxt -> nxt.number+acc) 0 list_clients

这将获取列表中的每个元素,获取所述元素的“数字”字段,并将其添加到迄今为止的总数中,并传递结果。

于 2013-06-10T04:02:31.843 回答
3

关于查尔斯马什的答案的更多解释。

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或您需要遍历列表中每个元素的任何内容,并将其与先前的结果聚合。

于 2013-06-10T10:19:28.713 回答