Sorting OCaml-如何对配对进行排序?

Sorting OCaml-如何对配对进行排序?,sorting,ocaml,Sorting,Ocaml,我们有两对: (3,10000) (1,2),(2,11) (2,0) (2, 10) (1,1000000) 我们想订购: (1,2) (1,1000000), (2,0) (2, 10) (2,11) (3,10000) 如何在OCaml中进行排序?该函数可以对列表中的任何'a->'a->int类型的比较函数进行排序,如果第一个参数严格小于第二个参数,则必须返回负数;如果严格大于,则返回正数;如果它们相等,则返回零 let lexicographic_compare (x,y) (x

我们有两对:

 (3,10000) (1,2),(2,11) (2,0) (2, 10) (1,1000000)
我们想订购:

 (1,2) (1,1000000), (2,0) (2, 10) (2,11) (3,10000)
如何在OCaml中进行排序?

该函数可以对列表中的任何
'a->'a->int
类型的比较函数进行排序,如果第一个参数严格小于第二个参数,则必须返回负数;如果严格大于,则返回正数;如果它们相等,则返回零

let lexicographic_compare (x,y) (x',y') =
  let compare_fst = compare x x' in
  if compare_fst <> 0 then compare_fst
  else compare y y'

# List.sort lexicographic_compare [ (3,10000); (1,2); (2,11); (2,0); (2, 10); (1,1000000)];;
- : (int * int) list =
[(1, 2); (1, 1000000); (2, 0); (2, 10); (2, 11); (3, 10000)]
让词典比较(x,y)(x',y')=
让我们比较一下
如果比较\u fst 0,则比较\u fst
否则就比较y'
#List.sort字典比较[(310000);(1,2);(2,11);(2,0);(2,10);(11000000)];;
-:(int*int)列表=
[(1, 2); (1, 1000000); (2, 0); (2, 10); (2, 11); (3, 10000)]
(此代码使用内置的
compare
函数对整数执行正确操作。)

请注意,实际上,
compare
函数已经按字典顺序比较了对,因此
List.sort compare…
(不编写任何新代码)似乎可以工作。不过,它在配对中的工作方式尚未指定,因此将来可能会发生变化,依赖这种方式是不好的。如果您想要一个精确的比较顺序,您应该编写特定于域的比较


(当然,有一些库已经提供了这种
词典学\u compare
逻辑;但关键是要学会如何自己做。)

我想你已经有了对的列表了@用户3052477忘记我的答案。我误解了你的问题。