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

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

此问题已在此处有答案

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

def arr= [
    "7.11.2",
    "6.2.1",
    "1.4",
    "4.13.5",
    "4.2.5",
    "13",
    "1.2.5",
    "1.4.2",
    "6.15.3",
    "6.4.4"
]

我需要它看起来像这样:

def list = [
    "1.2.5",
    "1.4",
    "1.4.2",
    "4.2.5",
    "4.13.5",
    "6.2.1",
    "6.4.4",
    "6.15.3",
    "7.11.2",
    "13"
]

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

gtlvzcf8

gtlvzcf81#

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

def arr= [
    "7.11.2",
    "6.2.1",
    "1.4",
    "4.13.5",
    "4.2.5",
    "13",
    "1.2.5",
    "1.4.2",
    "6.15.3",
    "6.4.4"
]

def sorted = arr.sort{ 
    def nums = it.split( /\./ )*.toInteger()
    while( 3 > nums.size() ) nums << 0
    int accum = 0
    nums.reverse().eachWithIndex{ num, ix -> accum += num * Math.pow( 10, ix * 2 ) }
    accum
}

assert sorted == [
  "1.2.5",
  "1.4",
  "1.4.2",
  "4.2.5",
  "4.13.5",
  "6.2.1",
  "6.4.4",
  "6.15.3",
  "7.11.2",
  "13"
]
wtzytmuj

wtzytmuj2#

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

相关问题