OCaml中如何统计列表中具备指定属性值的记录数量
OCaml 统计记录列表中指定属性值的元素总数
你可以直接通过OCaml标准库的List模块提供的函数实现需求,有两种常用写法:
- 写法1:筛选后取长度(可读性优先)
先通过List.filter过滤出所有age等于目标值的记录,再调用List.length获取筛选后列表的长度即可,逻辑直观好写:let count_by_age target person_list = person_list |> List.filter (fun p -> p.age = target) |> List.length (* 调用示例:统计age=21的记录数 *) let () = Printf.printf "%d\n" (count_by_age 21 personlist) (* 输出:2 *) - 写法2:折叠累加(性能优先)
如果列表规模很大,可以用List.fold_left一次遍历直接累加计数,不会生成中间筛选列表,内存和遍历效率更高:let count_by_age target person_list = List.fold_left (fun count p -> if p.age = target then count + 1 else count) 0 person_list
两种写法的运行结果完全一致,针对你给出的示例数据,传入目标age为21时都会返回预期结果2。
内容的提问来源于stack exchange,提问作者Simplicissimus
相关产品推荐
相关产品推荐

