OCaml中能否对Dynarray排序?有无通用排序方法?
OCaml通用排序方案解答
- 标准库Dynarray确实没有内置的
sort方法,但完全不用自己实现排序算法,有几种通用方案:转Array排序后转回Dynarray:利用Dynarray和Array的互转接口,借助成熟的
Array.sort完成排序,转换成本极低:let sort_dynarr compare_fn dynarr = Dynarray.of_array (Array.sort compare_fn (Dynarray.to_array dynarr))可以传入自定义比较函数,默认用
Stdlib.compare即可处理大部分基础类型。用
Stdlib.Sort通用排序模块:这就是OCaml里类似C++std::sort的通用排序工具,不绑定具体容器,只需提供元素比较、交换以及容器长度的接口,针对Dynarray的用法示例:let sort_dynarr compare_fn dynarr = Stdlib.Sort.sort (fun i j -> compare_fn (Dynarray.get dynarr i) (Dynarray.get dynarr j)) (fun i j -> Dynarray.swap dynarr i j) (Dynarray.length dynarr)这个模块内部实现了高效的排序算法,直接调用即可。
Batteries的Dynarray其实有sort方法:你可能漏看了,
BatDynarray提供了直接的sort函数,用法和Array.sort一致:BatDynarray.sort compare dynarr它内部封装了通用排序逻辑,直接调用即可完成原地排序。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

