按字典顺序对嵌套列表进行排序

时间:2018-12-15 22:35:26

标签: sml

考虑以下嵌套列表:

[["AXY"],["ABC","XYZ"],["EFG","ACF"]]

我想按字典顺序按每个内部列表的第一个元素对列表进行排序。输出应为:

[["ABC","XYZ"],["AXY"],["EFG","ACF"]]

如果任务只是对一个列表进行排序,我将使用以下线程(link)中的一种方法。但是,如何对嵌套列表进行排序?

2 个答案:

答案 0 :(得分:1)

假设您有一个带cmp函数的通用排序函数(如at the bottom of this answer所示),您只需要编写一个带两个字符串列表的函数:

fun cmpnest ((x::xs):string list, (y::ys):string list) = if x > y then GREATER else LESS
|   cmpnest ((x::xs):string list, nil) = GREATER
|   cmpnest (nil, _) = LESS

有了这些之后,就可以在通用排序函数中使用它:

- sort cmpnest [["AXY"], ["ABC", "XYZ"], ["EFG", "ACF"]];
> val it = [["ABC", "XYZ"], ["AXY"], ["EFG", "ACF"]] : string list list

答案 1 :(得分:1)

除了L3viathan的答案外,您还可以使用String.compare

fun cmpnest (x::_, y::_) = String.compare (x, y)
  | cmpnest (_::_, []) = GREATER
  | cmpnest ([], _) = LESS