考虑以下嵌套列表:
[["AXY"],["ABC","XYZ"],["EFG","ACF"]]
我想按字典顺序按每个内部列表的第一个元素对列表进行排序。输出应为:
[["ABC","XYZ"],["AXY"],["EFG","ACF"]]
如果任务只是对一个列表进行排序,我将使用以下线程(link)中的一种方法。但是,如何对嵌套列表进行排序?
答案 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