6

简单的问题,不知道有没有简单的答案。有没有办法对包含字母和数字的字符串列表进行排序,但也要考虑数字?

例如,我的列表包含:

(1) ["Group 1", "Group2", "Group3", "Group10", "Group20", "Group30"]

(字符串不一定有“组”这个词,它可以有其他词)

如果我对其进行排序,它会显示:

(2)
Group 1
Group 10
Group 2
Group 20
Group 3
Group 30

有没有办法像 (1) 一样对其进行排序?

谢谢

4

3 回答 3

7

尝试这个:

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
}

这取它在字符串中找到的最后一个数字,所以你可以写你想要的,但“索引”应该是最后一个数字

于 2012-09-04T12:00:14.463 回答
0

这应该可以解决问题:

def myList= ["Group 1", "Group2", "Group3", "2", "Group20", "Group30", "1", "Grape 1"]
print (myList.sort { a, b -> a.compareToIgnoreCase b })
于 2013-08-07T12:16:29.750 回答
0

您可以将字符串拆分为两个子字符串,然后分别对它们进行排序。

于 2012-09-04T12:02:04.777 回答