我有一个缓存列表,我需要按 hiddenDate 对其进行排序,例如" 2007/07/20#34; (最近一次)。如何仅使用hiddenDate参数在Ocaml中对此列表进行排序?
/home/scherrer/.netbeans/8.1/config/Preferences/org/netbeans/modules/projectui.properties
答案 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