Сортировка массивов в Groovy - PullRequest
2 голосов
/ 26 октября 2010

Я пытаюсь сравнить два массива в groovy. Мои попытки пока дали неоднозначный ответ, и поэтому я обращаюсь к коллективу за советом.

В следующем коде я беру 2 ответа REST, анализирую их и помещаю все под узлом Invoice в массив. Затем я уточняю свой массив, чтобы у меня был список InvoiceID, и затем пытаюсь сравнить результаты двух ответов, чтобы убедиться, что они совпадают.

Когда я сравниваю массив идентификаторов InvoiceID (Guids), с которыми они совпадают - это не то, чего я ожидаю, поскольку порядок выставления счетов в настоящее время различен для моих двух источников ответов.

Когда я сортирую массивы идентификаторов счетов, результаты отличаются.

Я подозреваю, что мой код неисправен, но потратил час на его дребезги, но безрезультатно.

Буду признателен за любые советы по сортировке массивов в 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

Ответы [ 2 ]

1 голос
/ 26 октября 2010

Помимо этого, вы не можете заменить:

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
1 голос
/ 26 октября 2010

Два массива считаются равными в Groovy, если они имеют одинаковое количество элементов и каждый элемент в одинаковой позиции одинаков.Вы можете убедиться в этом, запустив следующий код в консоли Groovy

Integer[] foo = [1,2,3,4]
Integer[] bar = [4,3,2,1]

assert foo != bar

bar.sort()

assert foo == bar
...