Как можно сравнить два массива с одинаковыми элементами или нет в Groovy? - PullRequest
7 голосов
/ 01 декабря 2011

Как сравнить два массива с одинаковыми элементами или нет?

def a = [1, 3, 2]
def b = [2, 1, 3]
def c = [2, 4, 3, 1]

a & b содержит одинаковые элементы, но a & c нет.

Ответы [ 2 ]

16 голосов
/ 01 декабря 2011

Вы можете попробовать преобразовать их в наборы и затем сравнить их, поскольку равенство в наборах определяется как наличие одинаковых элементов независимо от порядка.

assert a as Set == b as Set
assert a as Set != c as Set
8 голосов
/ 01 декабря 2011

Простая сортировка результатов и сравнение - простой способ, если ваши списки не слишком велики:

def a = [1, 3, 2]
def b = [2, 1, 3]
def c = [2, 4, 3, 1]

def haveSameContent(a1, a2) {
    a1.sort(false) == a2.sort(false)
}

assert haveSameContent(a, b) == true
assert haveSameContent(a, c) == false

false, переданный sort, предназначен для предотвращения переупорядочения на месте.Если вы можете изменить порядок списков, вы можете удалить его и, возможно, немного повысить производительность.

...