Groovy:如何对点分隔数字的字符串数组进行排序[重复]

dzhpxtsq  于 2023-10-15  发布在  其他
关注(0)|答案(2)|浏览(160)

此问题已在此处有答案

Sort list of version numbers groovy(2个答案)
10天前关闭。
考虑一个数组:

  1. def arr= [
  2. "7.11.2",
  3. "6.2.1",
  4. "1.4",
  5. "4.13.5",
  6. "4.2.5",
  7. "13",
  8. "1.2.5",
  9. "1.4.2",
  10. "6.15.3",
  11. "6.4.4"
  12. ]

我需要它看起来像这样:

  1. def list = [
  2. "1.2.5",
  3. "1.4",
  4. "1.4.2",
  5. "4.2.5",
  6. "4.13.5",
  7. "6.2.1",
  8. "6.4.4",
  9. "6.15.3",
  10. "7.11.2",
  11. "13"
  12. ]

请告诉我怎么做.
在数组上调用.sort()似乎是逐位排序,而不是按点分隔的数字排序。

gtlvzcf8

gtlvzcf81#

你可以像这样解析和编号你的版本:

  1. def arr= [
  2. "7.11.2",
  3. "6.2.1",
  4. "1.4",
  5. "4.13.5",
  6. "4.2.5",
  7. "13",
  8. "1.2.5",
  9. "1.4.2",
  10. "6.15.3",
  11. "6.4.4"
  12. ]
  13. def sorted = arr.sort{
  14. def nums = it.split( /\./ )*.toInteger()
  15. while( 3 > nums.size() ) nums << 0
  16. int accum = 0
  17. nums.reverse().eachWithIndex{ num, ix -> accum += num * Math.pow( 10, ix * 2 ) }
  18. accum
  19. }
  20. assert sorted == [
  21. "1.2.5",
  22. "1.4",
  23. "1.4.2",
  24. "4.2.5",
  25. "4.13.5",
  26. "6.2.1",
  27. "6.4.4",
  28. "6.15.3",
  29. "7.11.2",
  30. "13"
  31. ]
展开查看全部
wtzytmuj

wtzytmuj2#

虽然我完全同意前面的答案,但我想提另一个选择。如果你使用的是Java 9+,有一个名为java.lang.module.ModuleDescriptor.Version的类,也许对你的例子来说,它是一个过度的,但如果你有更复杂的版本,如-alpha-RC等。这门课可能很有帮助。您只需要使用Version.compareTo方法进行排序。

相关问题