如何在groovy中比较两个包含相同项目的数组?

nik*_*kli 7 arrays groovy compare

如何比较两个包含相同项目的数组?

def a = [1, 3, 2]
def b = [2, 1, 3]
def c = [2, 4, 3, 1]
Run Code Online (Sandbox Code Playgroud)

a&b包含相同的项目,但a&c不包含.

epi*_*ian 17

您可以尝试将它们转换为集合然后比较它们,因为集合中的相等性被定义为具有相同的元素而不管顺序如何.

assert a as Set == b as Set
assert a as Set != c as Set
Run Code Online (Sandbox Code Playgroud)

  • 只要列表元素不重复,这就有效.对于可能具有重复项的列表,此方法不会检测它们是否具有相同数量的每个单独元素.(我不认为这是OP所关心的事情,所以你的答案仍然有效,只是其他人找到这个答案的FYI). (11认同)

Ove*_*ous 8

如果您的列表不是太大,那么简单地对结果进行排序和比较是一种简单的方法:

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
Run Code Online (Sandbox Code Playgroud)

false传给sort是防止就地重新排序.如果可以更改列表的顺序,则可以删除它并可能获得一点性能.