gpt4 book ai didi

java - 使用分隔值对数组进行排序

转载 作者:行者123 更新时间:2023-12-01 04:21:18 27 4
gpt4 key购买 nike

我有一个数组,其值格式为“int.int.int”

String[] tab = [ '100.2.0' , '5.7.4' , '7.6.1' , '5.6.4' ]

我想按第一个数字对这个数组进行排序,然后按第二个数字对第一个排序的结果进行排序,仍然保持数组按第一个值排序,并且与第三个数字相同。预期结果:

[ '5.6.4' , '5.7.4' , '7.6.1' , '100.2.0' ]

最简单的解决方案是创建辅助数组并使用 for 循环,但我想知道是否可以做得更简单。我也尝试过使用常规排序

tab.sort { it -~/\./}

我已经删除了分隔符并像整数一样对元素进行了排序,但它对于这样的值不起作用

[ '2.12.1' , '10.5.2' , '5.2.3' ]

输出是

[ '5.2.3' , '10.5.2' , '2.12.1' ]

有什么想法如何以简单的方式对其进行排序,而不是通过创建新数组并按原始数组迭代 3 次?

最佳答案

可以这样做:

tab.sort { a, b -> [ a, b ]*.tokenize( '.' )*.
collect { it.toInteger() }
.transpose()
.findResult { x, y -> x <=> y ?: null } }

或者(可以说更简洁)

tab.sort { a, b ->
[ a, b ]*.tokenize( '.' )
.transpose()
.findResult { x, y ->
x.toInteger() <=> y.toInteger() ?: null
}
}

或者,如果版本号可以是不同数量的整数(即:1.61.7.43.3):

tab.sort { a, b ->
[ a, b ]*.tokenize( '.' ).with { u, v ->
[ u, v ].transpose().findResult { x, y ->
x.toInteger() <=> y.toInteger() ?: null
} ?: u.size() <=> v.size()
}
}

或者使用自定义比较器;-)

关于java - 使用分隔值对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18871675/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com