Groovy list.sort 按第一个、第二个然后第三个元素

2024-01-22

我有一个很棒的列表,即

list = [[2, 0, 1], [1, 5, 2], [1, 0, 3]]

我想按第一个元素的顺序对其进行排序,然后是第二个元素,然后是第三个元素。

Expected

assert list == [[1, 0, 3], [1, 5, 2], [2, 0, 1]]

我开始于list = list.sort{ a,b -> a[0] <=> b[0] }但这仅对第一个元素进行排序。你怎么完成?

Thanks


您应该能够以相反的顺序迭代所需的排序:

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]]

每个都应该覆盖前一个,足以保持组合排序的完整性。


您还可以将它们按顺序链接起来埃尔维斯操作员,?: http://groovy.codehaus.org/Operators#Operators-ElvisOperator(?:),当前一个比较相等时,它将推迟到下一个比较(并且<=>回报0):

list.sort { a,b -> a[0] <=> b[0] ?: a[1] <=> b[1] ?: a[2] <=> b[2] }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Groovy list.sort 按第一个、第二个然后第三个元素 的相关文章

随机推荐