简单的问题,不知道它是否得到一个简单的答案。 有没有办法对包含字母和数字的字符串列表进行排序,但也要考虑数字?
例如,我的列表包含:
(1) ["Group 1", "Group2", "Group3", "Group10", "Group20", "Group30"]
(字符串不一定有“group”一词,也可能有其他字样)
如果我对它进行排序,它会显示:
(2)
Group 1
Group 10
Group 2
Group 20
Group 3
Group 30
有没有办法像(1)那样对它进行排序?
由于
答案 0 :(得分:6)
试试这个:
def test=["Group 1", "Group2", "Group3", "2", "Group20", "Group30", "1", "Grape 1", "Grape 12", "Grape 2", "Grape 22"]
test.sort{ a,b ->
def n1 = (a =~ /\d+/)[-1] as Integer
def n2 = (b =~ /\d+/)[-1] as Integer
def s1 = a.replaceAll(/\d+$/, '').trim()
def s2 = b.replaceAll(/\d+$/, '').trim()
if (s1 == s2){
return n1 <=> n2
}
else{
return s1 <=> s2
}
}
println test
如果您想首先比较您需要更改内部 的数字:
if (n1 == n2){
return s1 <=> s2
}
else{
return n1 <=> n2
}
这是在字符串中找到的最后一个数字,所以你可以写出你想要的,但'index'应该是最后一个数字
答案 1 :(得分:0)
您可以将字符串拆分为两个子字符串,然后单独对它们进行排序。
答案 2 :(得分:0)
这应该可以解决问题:
def myList= ["Group 1", "Group2", "Group3", "2", "Group20", "Group30", "1", "Grape 1"]
print (myList.sort { a, b -> a.compareToIgnoreCase b })