Come posso confrontare gli articoli in due elenchi e creare un nuovo elenco con la differenza in Groovy?Come posso confrontare due elenchi in Groovy
19
A
risposta
31
Le raccolte intersecate potrebbero aiutarti in questo, anche se è un po 'complicato invertirlo. Forse qualcosa di simile:
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
mi basta usare gli operatori aritmetici, penso che sia molto più evidente quello che sta succedendo:
def a = ["foo", "bar", "baz", "baz"]
def b = ["foo", "qux"]
assert ["bar", "baz", "baz", "qux"] == ((a - b) + (b - a))
9
Suppongo che il PO sta chiedendo i exclusive disjunction tra due liste ?
(Nota: Nessuna delle soluzioni precedenti gestire i duplicati!)
Se si vuole codificare da soli in Groovy, procedere come segue:
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, sta utilizzando gli elenchi/matrici di interi. Si (può) avere problemi, a causa del metodo polimorfico remove (int) vs remove (Object). See here for a (untested) solution.
Invece di reinventare la ruota tuttavia, si dovrebbe utilizzare una libreria esistente (ad esempio 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']
Problemi correlati
- 1. Java Confrontare due elenchi
- 2. Come posso confrontare due elenchi ordinati in python?
- 3. Come confrontare due elenchi in Haskell?
- 4. Come confrontare due elenchi di regole?
- 5. Come posso confrontare due array con gli stessi elementi o non in groovy?
- 6. Come posso confrontare due CLLocationCoordinate2D? (iPhone/iPad)
- 7. Come posso confrontare due revisioni in git in Eclipse?
- 8. Come confrontare due dataframes?
- 9. Come confrontare due Qstrings?
- 10. Come confrontare due hash?
- 11. Come posso confrontare due liste in python e restituire corrispondenze
- 12. Come confrontare due elenchi di grandi dimensioni in modo efficiente in C#?
- 13. Confrontare due timestamp in java
- 14. Come confrontare due timestamp in carbonio?
- 15. Come confrontare due file in Eclipse?
- 16. Come confrontare due X509Certificate2 C#
- 17. come confrontare due date stringa in javascript?
- 18. Come confrontare due date in SQLite?
- 19. Come confrontare due espressioni regolari?
- 20. come confrontare due mappe hash?
- 21. Come confrontare due elementi HTML
- 22. Come confrontare due oggetti java
- 23. come confrontare due std :: set?
- 24. Come confrontare due variabili CGSize?
- 25. Confrontare due arraylist
- 26. come confrontare due array in python?
- 27. Come confrontare due revisioni SVN in XCode?
- 28. Come confrontare due DateTime in secondi?
- 29. Come confrontare i caratteri in due CharSequences
- 30. Come confrontare due array in Kotlin?
È necessario dire che cosa si intende per "differenza". L'ordine è importante? Le copie multiple sono importanti? – John
Intendi la disgiunzione esclusiva tra due elenchi? vale a dire https://en.wikipedia.org/wiki/Exclusive_or –