sorting - Groovy list.sort 按第一个,第二个然后第三个元素

标签 sorting groovy

我有一个 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/

相关文章:

sorting - 在 Elasticsearch 中如何按两个日期中较小的一个进行排序?

python - 首先按第一列排序二维列表,然后按第二列排序

plugins - Griffon 如何运行本地插件

regex - groovy 正则表达式

testing - 将 Gebish 集成到 Gradle 中

java - Grails:groovy.sql.Sql 和 Model.withTransaction 会发生什么?

c - 从 3 个数组中找出 3 个数字 a、b、c,其总和等于给定数字 T?

python - 如何表示已排序的字典?

java - 线程 "main"java.lang.ArrayIndexOutOfBoundsException : 2 MergeSort 中的异常

grails - Grails Web Flow的第一状态