¿Cómo puedo comparar los artículos en dos listas y crear una nueva lista con la diferencia en Groovy?¿Cómo puedo comparar dos listas en Groovy
19
A
Respuesta
31
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
44
que acababa de utilizar los operadores aritméticos, creo que es mucho más evidente lo que está pasando:
def a = ["foo", "bar", "baz", "baz"]
def b = ["foo", "qux"]
assert ["bar", "baz", "baz", "qux"] == ((a - b) + (b - a))
9
Asumo el PO está pidiendo los exclusive disjunction entre dos listas ?
(Nota: Ninguna de las soluciones anteriores manejar duplicados!)
Si desea codificar por sí 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
Un gotcha, es el uso de listas/matrices de ints. Usted (puede) tener problemas, debido al método polimórfico remove (int) vs remove (Object). See here for a (untested) solution.
vez de reinventar la rueda embargo, sólo debe utilizar 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']
Cuestiones relacionadas
- 1. Groovy fusiona dos listas?
- 2. Java comparar dos listas
- 3. ¿Cómo puedo comparar dos listas en python y devolver coincidencias?
- 4. Comparar dos listas para buscar elementos comunes
- 5. Comparar dos listas para las diferencias
- 6. Comparar dos listas genéricas y eliminar duplicados
- 7. ¿Cómo comparar dos listas de dicts en Python?
- 8. ¿cómo se pueden comparar elementos de dos listas con linq?
- 9. ¿Cómo puedo comparar dos matrices que contienen los mismos elementos o no en groovy?
- 10. ¿Cómo comparar dos listas <String> entre sí?
- 11. cómo comparar dos NSMutableArray?
- 12. ¿Cómo comparar dos consultas?
- 13. comparar dos listas de actualizaciones, supresiones y adiciones
- 14. Manera pitónica de comparar dos listas e imprimir las diferencias
- 15. python iterar sobre las dos listas al comparar elementos
- 16. ¿Cómo puedo comparar dos revisiones en git en Eclipse?
- 17. ¿Cómo comparar dos NSIndexPaths?
- 18. Cómo comparar dos fechas
- 19. ¿Cómo comparar dos NSInteger?
- 20. Comparar cadenas de versiones en groovy
- 21. ¿Cómo puedo comparar dos archivos en un archivo por lotes?
- 22. ¿Cómo puedo comparar dos fechas en vbscript/ASP?
- 23. ¿Cómo puedo comparar dos valores de color en jQuery/JavaScript?
- 24. Cómo comparar dos X509Certificate2 C#
- 25. comparar dos imágenes en android
- 26. Bash - Diferencia entre dos listas
- 27. Comparar dos fechas en Java
- 28. cómo comparar dos métodos en eclipse
- 29. ¿Cómo comparar dos archivos en Eclipse?
- 30. ¿Cómo comparar dos expresiones regulares?
Es necesario decir lo que quiere decir con "diferencia". Es importante la orden? ¿Son importantes las copias múltiples? – John
¿Te refieres a la disyunción exclusiva entre dos listas? es decir, https://en.wikipedia.org/wiki/Exclusive_or –