OCaml用户定义类型的排序列表

时间:2016-03-27 14:46:32

标签: list sorting types ocaml

我有一个缓存列表,我需要按 hiddenDate 对其进行排序,例如" 2007/07/20#34; (最近一次)。如何仅使用hiddenDate参数在Ocaml中对此列表进行排序?

/home/scherrer/.netbeans/8.1/config/Preferences/org/netbeans/modules/projectui.properties

1 个答案:

答案 0 :(得分:2)

以下是sort功能的文档:

val sort : ('a -> 'a -> int) -> 'a list -> 'a list 
  

对列表进行排序   根据比较函数增加顺序。比较   如果函数的参数比较为正,则函数必须返回0   如果第一个是更大的整数,如果是第一个则是负整数   较小(有关完整规范,请参阅Array.sort)。例如,   比较是一个合适的比较函数。结果列表是   按升序排序。 List.sort保证以常量运行   堆空间(除了结果列表的大小)和   对数堆栈空间。当前实现使用Merge Sort。   它在常量堆空间和对数堆栈空间中运行。

因此,您需要为隐藏日期字段提供比较功能。而且,你不能只比较像字符串这样的日期。这将导致错误的订购。第一个近似值如下:

let date str = Str.(split (regexp "/") str)
let compare_dates s1 s2 = compare (date s1) (date s2)
let compare_by_hidden_date c1 c2 = compare_dates c1.hiddenDate c2.hiddenDate
let sort_by_hidden_date = List.sort compare_by_hidden_date