2011-12-01 11 views

Respuesta

13

Puede intentar convertirlos en Conjuntos y luego compararlos, ya que la igualdad en Conjuntos se define como tener los mismos elementos independientemente del orden.

assert a as Set == b as Set 
assert a as Set != c as Set 
+9

Eso funciona siempre que los elementos de la lista no estén duplicados. Para las listas que pueden tener duplicados, este método no detectará si tienen el mismo número de cada elemento individual. (No me da la impresión de que esto es algo que le importa a OP, por lo que su respuesta sigue siendo válida, solo un FYI para otros que encuentran esta respuesta). –

8

simplemente ordenar los resultados y comparar de forma muy sencilla, si sus listas no son demasiado grandes:

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 

El false pasado a sort es prevenir reordenamiento en el lugar. Si está bien cambiar el orden de las listas, puede eliminarlo y posiblemente obtener un poco de rendimiento.

+0

No tiene sentido comparar un valor booleano con 'true' o' false'. Creo que 'assert haveSameContent (a, b)' y 'assert! HaveSameContent (a, c)' se lee mejor. – epidemian

+0

Eso es realmente una cuestión de opinión. Creo que lo hace más claro con el '== falso' que espera una salida falsa. Es bastante fácil perder un solo signo de exclamación cuando se roza el código. (Además, no lo olvides, debido a Groovy truth, '! 0' o'! [] 'Devuelve' true', pero 'assert [] == false' fallará.) – OverZealous

+0

Lo he probado, pero no es verdad – nikli

Cuestiones relacionadas