Groovy中的数组排序
我试图比较groovy中的两个数组。到目前为止,我的尝试产生了复杂的反应,因此我向集体寻求建议 在下面的代码中,我将获取2个REST响应,解析它们并将Invoice节点下的所有内容放入一个数组中。然后我进一步限定我的数组,这样我就有一个invoiceid列表,然后尝试比较两个响应的结果,以确保它们是相同的 当我比较他们匹配的InvoiceID(GUID)数组时——这不是我所期望的,因为我的两个响应源之间的发票顺序目前不同 当我对发票ID数组进行排序时,结果会有所不同 我怀疑我的代码有问题,但我花了一个小时的时间反复检查,结果一无所获 如果您对groovy中的数组排序或下面的代码有任何建议,我们将不胜感激:Groovy中的数组排序,groovy,soapui,Groovy,Soapui,我试图比较groovy中的两个数组。到目前为止,我的尝试产生了复杂的反应,因此我向集体寻求建议 在下面的代码中,我将获取2个REST响应,解析它们并将Invoice节点下的所有内容放入一个数组中。然后我进一步限定我的数组,这样我就有一个invoiceid列表,然后尝试比较两个响应的结果,以确保它们是相同的 当我比较他们匹配的InvoiceID(GUID)数组时——这不是我所期望的,因为我的两个响应源之间的发票顺序目前不同 当我对发票ID数组进行排序时,结果会有所不同 我怀疑我的代码有问题,但我花
gu = new com.eviware.soapui.support.GroovyUtils( context )
def xmlSlurper = new groovy.util.XmlSlurper()
// Setting up the response parameters
def responseSTAGE = xmlSlurper.parseText(context.expand('${GET Invoices - STAGE#Response}'));
def responseSTAGE2 = xmlSlurper.parseText(context.expand('${GET Invoices - STAGE2#Response}'));
responseInvoicesSTAGE = responseSTAGE.Invoices
responseInvoicesSTAGE2 = responseSTAGE2.Invoices
def arrayOfInvoicesSTAGE = []
def arrayOfInvoicesSTAGE2 = []
def counter = 0
for (invoice in responseInvoicesSTAGE.Invoice) {
arrayOfInvoicesSTAGE[counter] = responseInvoicesSTAGE.Invoice[counter].InvoiceID
//log.info counter+" STAGE"+arrayOfInvoicesSTAGE[counter]
arrayOfInvoicesSTAGE2[counter] = responseInvoicesSTAGE2.Invoice[counter].InvoiceID
//log.info counter+" STAGE2"+arrayOfInvoicesSTAGE2[counter]
counter++
}
log.info arrayOfInvoicesSTAGE
log.info arrayOfInvoicesSTAGE2
def sortedSTAGE = arrayOfInvoicesSTAGE.sort()
def sortedSTAGE2 = arrayOfInvoicesSTAGE2.sort()
log.info sortedSTAGE
在Groovy中,如果两个数组具有相同的元素数量,并且位于相同位置的每个元素都相等,则认为它们是相等的。您可以通过在Groovy控制台中运行以下代码来验证这一点
Integer[] foo = [1,2,3,4]
Integer[] bar = [4,3,2,1]
assert foo != bar
bar.sort()
assert foo == bar
顺便说一句,你不能替换:
def arrayOfInvoicesSTAGE = []
def arrayOfInvoicesSTAGE2 = []
def counter = 0
for (invoice in responseInvoicesSTAGE.Invoice) {
arrayOfInvoicesSTAGE[counter] = responseInvoicesSTAGE.Invoice[counter].InvoiceID
//log.info counter+" STAGE"+arrayOfInvoicesSTAGE[counter]
arrayOfInvoicesSTAGE2[counter] = responseInvoicesSTAGE2.Invoice[counter].InvoiceID
//log.info counter+" STAGE2"+arrayOfInvoicesSTAGE2[counter]
counter++
}
与
嗨,唐!这证实了我最初的理解。我在上面遇到的问题是,我的未排序对或数组在排序之前匹配,而在排序之后不匹配。太棒了,谢谢你的提姆。这是非常漂亮的代码!
def arrayOfInvoicesSTAGE = responseInvoicesSTAGE.Invoice*.InvoiceID
def arrayOfInvoicesSTAGE2 = responseInvoicesSTAGE2.Invoice*.InvoiceID