2010-10-26 8 views
2

J'essaie de comparer deux tableaux dans groovy. Mes tentatives jusqu'à présent ont donné une réponse mitigée et donc je me tourne vers le collectif pour obtenir des conseils.Tri des tableaux dans Groovy

Dans le code suivant, je prends 2 réponses REST, en les analysant et en plaçant tout sous le nœud Invoice dans un tableau. Je qualifie ensuite mon tableau de sorte que j'ai une liste d'InvoiceID, puis j'essaie de comparer les résultats des deux réponses pour m'assurer qu'elles sont identiques. Lorsque je compare le tableau des InvoiceID (Guids) qu'ils correspondent, ce n'est pas ce que j'attends car l'ordre de facturation est actuellement différent entre mes deux sources de réponse.

Lorsque je trier les tableaux d'ID de factures, les résultats diffèrent.

Je soupçonne que mon code est défectueux, mais j'ai passé une heure à le parcourir, en vain.

Tous les conseils sur les tableaux de tri Groovy ou sur le code ci-dessous serait très appréciée:

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 

Répondre

1

En aparté, vous ne pouvez pas remplacer:

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++ 
} 

avec

def arrayOfInvoicesSTAGE = responseInvoicesSTAGE.Invoice*.InvoiceID 
def arrayOfInvoicesSTAGE2 = responseInvoicesSTAGE2.Invoice*.InvoiceID 
+0

Génial, merci pour ce Tim. C'est un code infiniment plus joli! –

1

Deux tableaux sont considérés comme égaux en Groovy s'ils ont ils ont le même nombre d'éléments et chaque élément dans la la même position est égale. Vous pouvez vérifier cela en exécutant le code suivant dans la console Groovy

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

assert foo != bar 

bar.sort() 

assert foo == bar 
+0

Salut Don! Cela confirme ma compréhension originale. Le problème auquel je faisais face ci-dessus était que ma paire non triée ou tableaux alignés avant le tri et ne correspond pas après. –