如何使用 ocaml 中的键和值对元组列表进行排序?
How to sort a list of tuples using both key and value in ocaml?
我有一个元组列表,例如 (1, "a"), (2, "b"), (3, "c"),我想对它们进行排序
1个
2乙
3 b
其中数字顺序优先,然后是字母顺序。就像我有
(1, “鲍勃”), (1, “猫”)
看起来像
1 鲍勃
1 只猫
这就是我正在尝试的
let mylist = List.sort (fun (c1, s1) (c2, s2) -> Pervasives.compare c2 c1 ) -> Pervasives.compare s1 s2) mysortedlist
但这显然在语法上是错误的。
如果只按数字顺序排序的话是这样的
let mylist = List.sort (fun (c1, _) (c2, _) -> compare c2 c1) mylist
此外,这些 let 语句是更大的 let 块的一部分,在语句中,我只关注这个特定部分。
提前致谢。
编辑:我也想按字母顺序的相反顺序执行此操作。
例如,(1, "bob"), (1, "cat") (0, "zebra") 应该是这样的
0 斑马
1 鲍勃
1 只猫
这很简单。您传递给 List.sort
的函数只需要比较值 如果 键相同
List.sort
(fun (k1, v1) (k2, v2) ->
if k1 = k2 then compare v1 v2
else compare k1 k2)
[(1, "B"); (2, "C"); (2, "A")]
结果是:
[(1, "B"); (2, "A"); (2, "C")]
或者,因为它使我们免于对 k1
和 k2
和 进行相等性检查,可能 运行 compare
在他们身上:
List.sort
(fun (k1, v1) (k2, v2) ->
match compare k1 k2 with
| 0 -> compare v1 v2
| c -> c)
[(1, "B"); (2, "C"); (2, "A")]
我有一个元组列表,例如 (1, "a"), (2, "b"), (3, "c"),我想对它们进行排序
1个 2乙 3 b
其中数字顺序优先,然后是字母顺序。就像我有
(1, “鲍勃”), (1, “猫”)
看起来像
1 鲍勃 1 只猫
这就是我正在尝试的
let mylist = List.sort (fun (c1, s1) (c2, s2) -> Pervasives.compare c2 c1 ) -> Pervasives.compare s1 s2) mysortedlist
但这显然在语法上是错误的。
如果只按数字顺序排序的话是这样的
let mylist = List.sort (fun (c1, _) (c2, _) -> compare c2 c1) mylist
此外,这些 let 语句是更大的 let 块的一部分,在语句中,我只关注这个特定部分。
提前致谢。
编辑:我也想按字母顺序的相反顺序执行此操作。
例如,(1, "bob"), (1, "cat") (0, "zebra") 应该是这样的
0 斑马 1 鲍勃 1 只猫
这很简单。您传递给 List.sort
的函数只需要比较值 如果 键相同
List.sort
(fun (k1, v1) (k2, v2) ->
if k1 = k2 then compare v1 v2
else compare k1 k2)
[(1, "B"); (2, "C"); (2, "A")]
结果是:
[(1, "B"); (2, "A"); (2, "C")]
或者,因为它使我们免于对 k1
和 k2
和 进行相等性检查,可能 运行 compare
在他们身上:
List.sort
(fun (k1, v1) (k2, v2) ->
match compare k1 k2 with
| 0 -> compare v1 v2
| c -> c)
[(1, "B"); (2, "C"); (2, "A")]