Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String Groovy中字母和数字的数字字符串排序_String_Sorting_Groovy_Numeric - Fatal编程技术网

String Groovy中字母和数字的数字字符串排序

String Groovy中字母和数字的数字字符串排序,string,sorting,groovy,numeric,String,Sorting,Groovy,Numeric,简单的问题,不知道是否能得到一个简单的答案。 有没有一种方法可以对包含字母和数字的字符串列表进行排序,同时也考虑数字 例如,我的列表包含: (1) ["Group 1", "Group2", "Group3", "Group10", "Group20", "Group30"] (字符串不一定包含单词“group”,它可以包含其他单词) 如果我对它进行排序,它会显示: (2) Group 1 Group 10 Group 2 Group 20 Group 3 Group 30 有没有办法像(1

简单的问题,不知道是否能得到一个简单的答案。 有没有一种方法可以对包含字母和数字的字符串列表进行排序,同时也考虑数字

例如,我的列表包含:

(1) ["Group 1", "Group2", "Group3", "Group10", "Group20", "Group30"]
(字符串不一定包含单词“group”,它可以包含其他单词)

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

(2)
Group 1
Group 10
Group 2
Group 20
Group 3
Group 30
有没有办法像(1)那样排序

谢谢

试试这个:

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
def测试=[“第1组”、“第2组”、“第3组”、“第2组”、“第20组”、“第30组”、“第1组”、“第12组”、“第2组”、“第22组”]
test.sort{a,b->
def n1=(a=~/\d+/)[-1]为整数
def n2=(b=~/\d+/)[-1]为整数
def s1=a.replaceAll(/\d+$/,'').trim()
def s2=b.replaceAll(/\d+$/,'').trim()
如果(s1==s2){
返回n1 n2
}
否则{
返回s1 s2
}
}
println试验
如果要首先比较数字,则必须将内部If更改为:

if(n1==n2){
返回s1 s2
}
否则{
返回n1 n2
}

这是它在字符串中找到的最后一个数字,因此您可以写下您想要的内容,但“索引”应该是最后一个数字

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

这应该可以做到:

def myList= ["Group 1", "Group2", "Group3", "2", "Group20", "Group30", "1", "Grape 1"]
print (myList.sort { a, b -> a.compareToIgnoreCase b })

非常好的尝试,兄弟,但测试如下:
def test=[“第1组”、“第2组”、“第3组”、“第2组”、“第20组”、“第30组”、“第1组”、“第1组”、“第12组”、“第2组”、“第22组”]
结果应该是什么?它应该先检查数字而不是字符串?或者先显示字符串而不是数字?显示测试中的println
[第1组,第1组,第1组,第2组,第2组,第3组,第12组,第20组,第22组,第30组]
您在这里看到的顺序是什么?真酷+10您可以更简洁地使用
s1s2:n1n2
if
来检查
整数是否存在。但这太过分了。回答得好,兄弟。
def myList= ["Group 1", "Group2", "Group3", "2", "Group20", "Group30", "1", "Grape 1"]
print (myList.sort { a, b -> a.compareToIgnoreCase b })