peliculas - groovy traduccion
¿Cómo puedo comparar dos listas en Groovy? (3)
¿Cómo puedo comparar los artículos en dos listas y crear una nueva lista con la diferencia en Groovy?
¿Supongo que el OP está pidiendo la en.wikipedia.org/wiki/Exclusive_or entre dos listas?
( Nota: ¡ Ninguna de las soluciones anteriores maneja duplicados!)
Si quiere codificarlo usted mismo en Groovy, haga lo siguiente:
def a = [''a'',''b'',''c'',''c'',''c''] // diff is [b, c, c]
def b = [''a'',''d'',''c''] // diff is [d]
// for quick comparison
assert (a.sort() == b.sort()) == false
// to get the differences, remove the intersection from both
a.intersect(b).each{a.remove(it);b.remove(it)}
assert a == [''b'',''c'',''c'']
assert b == [''d'']
assert (a + b) == [''b'',''c'',''c'',''d''] // all diffs
Uno gotcha, está usando listas / matrices de ints. Usted (puede) tener problemas, debido al método polimórfico remove (int) vs remove (Object). Vea aquí para una solución (no probada) .
Sin embargo , en lugar de reinventar la rueda , debes usar una biblioteca existente (por ejemplo commons-collections
):
@Grab(''commons-collections:commons-collections:3.2.1'')
import static org.apache.commons.collections.CollectionUtils.*
def a = [''a'',''b'',''c'',''c'',''c''] // diff is [b, c, c]
def b = [''a'',''d'',''c''] // diff is [d]
assert disjunction(a, b) == [''b'', ''c'', ''c'', ''d'']
Las colecciones se cruzan pueden ayudarte con eso, incluso si es un poco complicado revertirlo. Tal vez algo como esto:
def collection1 = ["test", "a"]
def collection2 = ["test", "b"]
def commons = collection1.intersect(collection2)
def difference = collection1.plus(collection2)
difference.removeAll(commons)
assert ["a", "b"] == difference
Solo usaría los operadores aritméticos, creo que es mucho más obvio lo que está pasando:
def a = ["foo", "bar", "baz", "baz"]
def b = ["foo", "qux"]
assert ["bar", "baz", "baz", "qux"] == ((a - b) + (b - a))