我有这个groovy代码,我想删除第一个元素,但我不知道如何。 .drop(0)
没有做任何事情而.remove(0)
给了我一个错误:groovy.lang.MissingMethodException: No signature of method: [Ljava.lang.String;.remove() is applicable for argument types: (java.lang.Integer) values: [0] Possible solutions: reverse(), getAt(java.lang.Integer), reverse(boolean), drop(int), take(int) at Cert_RouteJob_exec_script_RouteJob.run(Cert_RouteJob_exec_script_RouteJob:16)
有人可以帮我解决如何删除第一个元素并解释一下吗?
println job."Cert_Applications".getMetaClass()
// result: org.codehaus.groovy.runtime.HandleMetaClass@50446a34[groovy.lang.MetaClassImpl@50446a34[class [Ljava.lang.String;]]
println job."Cert_Applications".getProperties()
// result: [class:class [Ljava.lang.String;, length:16]
println job."Cert_Applications".inspect()
// result: ['Accept', 'Afp', 'Exe', 'IA', 'Exe', 'IA', 'IA', 'Afp', 'Afp', 'Exe', 'IA', 'Exe', 'Exe', 'Afp', 'IA', 'Afp']
println job."Cert_Applications".toString()
// result: [Accept, Afp, Exe, IA, Exe, IA, IA, Afp, Afp, Exe, IA, Exe, Exe, Afp, IA, Afp]
applications = job."Cert_Applications"
println applications.size()
// result: 16
if (applications.size() > 0){
println applications[0]
// result: Accept
// applications.remove(0)
println applications.drop(0)
// result: [Accept, Afp, Exe, IA, Exe, IA, IA, Afp, Afp, Exe, IA, Exe, Exe, Afp, IA, Afp]
}
println applications.inspect()
// result: ['Accept', 'Afp', 'Exe', 'IA', 'Exe', 'IA', 'IA', 'Afp', 'Afp', 'Exe', 'IA', 'Exe', 'Exe', 'Afp', 'IA', 'Afp']
答案 0 :(得分:2)
看起来applications
是一个数组。数组是静态大小的。您无法删除元素并让数组缩小以考虑删除该元素。您可以使用List
,但不能使用数组。
如果您只想将索引为零的值归零,则可以执行applications[0] = null
之类的操作。
修改强>
你可以经历一些旋转,比如将数组转换为List
,然后移除第一个元素,然后根据需要将其转换回数组。这可能看起来像这样......
// this will fail if applications has fewer than 2 elements.
// size checking omitted here for brevity
applications = (applications as List)[1..-1] as String[]
在使用之前,请确保您了解其中发生的情况。这可能是也可能不是你想做的事。
如果你真的不需要这个东西成为一个数组,你可以通过将它转换为List
然后继续进行简化。而不是......
applications = job."Cert_Applications"
你可以这样做......
applications = job."Cert_Applications" as List
然后您可以执行applications.remove(0)
之类的操作,从List