OCaml中如何按先数值后字符串的优先级对元组列表进行多条件排序
语法错误原因
你写的代码存在两处语法问题:
- 数值比较逻辑后多了多余的右括号,提前终止了匿名函数的定义
- 多余的
->符号不符合OCaml匿名函数的语法规范
符合需求的排序代码
根据你给出的排序示例(数值升序优先,同数值时字符串升序排列),正确写法如下:
let mylist = List.sort (fun (c1, s1) (c2, s2) -> let cmp_num = compare c1 c2 in if cmp_num <> 0 then cmp_num else compare s1 s2 ) mylist
规则调整说明
如果需要调整排序逻辑,可以按如下方式修改:
- 若要数值改为降序排序,将
compare c1 c2改为compare c2 c1 - 若要同数值下字符串改为倒序排序,将
compare s1 s2改为compare s2 s1
内容的提问来源于stack exchange,提问作者Shisui
相关产品推荐
相关产品推荐

