我有一个 groovy 列表,即
list = [[2, 0, 1], [1, 5, 2], [1, 0, 3]]
我想按第一个元素的顺序排序,然后是第二个,然后是第三个。
预期的
assert list == [[1, 0, 3], [1, 5, 2], [2, 0, 1]]
我从
list = list.sort{ a,b -> a[0] <=> b[0] }
开始但这仅对第一个元素进行排序。你怎么完成?谢谢
最佳答案
您应该能够以相反的顺序遍历所需的排序:
list = [[2, 0, 1], [1, 5, 2], [1, 0, 3]]
list = list.sort{ a,b -> a[2] <=> b[2] }
list = list.sort{ a,b -> a[1] <=> b[1] }
list = list.sort{ a,b -> a[0] <=> b[0] }
assert list == [[1, 0, 3], [1, 5, 2], [2, 0, 1]]
每个都应该覆盖前一个,以保持组合排序的完整性。
您也可以使用 Elvis operator,
?:
按顺序链接它们。 ,当前一个相等时,它将推迟到下一个比较(并且 <=>
返回 0
):list.sort { a,b -> a[0] <=> b[0] ?: a[1] <=> b[1] ?: a[2] <=> b[2] }
关于sorting - Groovy list.sort 按第一个,第二个然后第三个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1467641/