Поиск содержимого массива в другом массиве - PullRequest
0 голосов
/ 27 октября 2010

Я использую groovy в SOAPUI и сейчас пытаюсь установить, дает ли ответ от 2 конечных точек одинаковые результаты.

Я конвертирую свой XML-ответ в массив для каждой конечной точки, а затем перебираю Array1, а затем Array2, чтобы подтвердить наличие каждого элемента в Array1.

Это очень уродливый код, и я смотрел на карты, но синтаксис меня смутил. Я не уверен, как бы я создал такую ​​карту массива. Как вы создаете ключи в таком случае?

А пока, ради моего благополучия ... Есть более изящный способ добиться следующего:

def outerCount = 0
def innerCount = 0
for( i in arrayOfInvoicesSTAGE)
{

for( j in arrayOfInvoicesSTAGE2)
{

    if (i == j) 
    {
        log.info outerCount+" FOUND "+arrayOfInvoicesSTAGE[outerCount] + " in both responses"
        log.info "STAGE: "+i+" STAGE2: "+j
    }       
}
outerCount++
}

Также! для бонуса пальцы вверх! Может кто-нибудь посоветовать мне, как я могу добавить разрыв во внутренний цикл, чтобы он выпрыгивал, как только совпадение было найдено? Я видел код JS, который позволяет это, но не может получить что-то похожее на работу в Groovy

Действительно, вышеприведенный код является самым пахнущим кодом ... но я должен как-то смазать соединения ... это было давно! :)

Как всегда, любые советы приветствуются.

Ответы [ 2 ]

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

Списки имеют метод пересечения в Groovy

def a =  [ 1, 2, 3, 4, 5 ]
def b =  [ 2, 3, 6 ]


a.intersect( b ).each { item ->
  log.info "Found $item in both responses"
}

Я думаю, это то, что вы хотите?

0 голосов
/ 27 октября 2010
def a =  ["1thing","2thing","3thing"]
def b =  ["1thing","2thing","3thing","4thing"]

// should return any element not in both lists
if (a.size < b.size ) {
   b - a
} else {
   a - b
} 
...