Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/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
Groovy中的数组排序_Groovy_Soapui - Fatal编程技术网

Groovy中的数组排序

Groovy中的数组排序,groovy,soapui,Groovy,Soapui,我试图比较groovy中的两个数组。到目前为止,我的尝试产生了复杂的反应,因此我向集体寻求建议 在下面的代码中,我将获取2个REST响应,解析它们并将Invoice节点下的所有内容放入一个数组中。然后我进一步限定我的数组,这样我就有一个invoiceid列表,然后尝试比较两个响应的结果,以确保它们是相同的 当我比较他们匹配的InvoiceID(GUID)数组时——这不是我所期望的,因为我的两个响应源之间的发票顺序目前不同 当我对发票ID数组进行排序时,结果会有所不同 我怀疑我的代码有问题,但我花

我试图比较groovy中的两个数组。到目前为止,我的尝试产生了复杂的反应,因此我向集体寻求建议

在下面的代码中,我将获取2个REST响应,解析它们并将Invoice节点下的所有内容放入一个数组中。然后我进一步限定我的数组,这样我就有一个invoiceid列表,然后尝试比较两个响应的结果,以确保它们是相同的

当我比较他们匹配的InvoiceID(GUID)数组时——这不是我所期望的,因为我的两个响应源之间的发票顺序目前不同

当我对发票ID数组进行排序时,结果会有所不同

我怀疑我的代码有问题,但我花了一个小时的时间反复检查,结果一无所获

如果您对groovy中的数组排序或下面的代码有任何建议,我们将不胜感激:

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