2010-03-30 28 views
19

İki listeden öğeleri nasıl karşılaştırabilirim ve Groovy'deki farkla yeni bir liste oluşturabilir miyim?İki listeyi karşılaştırabilirim Groovy

+0

:

Aksine ancak Tekerleği yeniden icat yerine, sadece mevcut bir kitaplığı (örn commons-collections) kullanmalıdır. Sipariş önemli mi? Birden çok kopya önemli mi? – John

+0

İki liste arasındaki özel ayrımı mı kastediyorsunuz? yani https://en.wikipedia.org/wiki/Exclusive_or –

cevap

31

Koleksiyonun kesişme noktaları, tersine çevirmek biraz zor olsa bile size yardımcı olabilir. Böyle Belki bir şey:

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

Sadece aritmetik operatörleri kullanabilirsiniz ediyorum, ben neler olduğunu çok daha açık olduğunu düşünüyorum:

def a = ["foo", "bar", "baz", "baz"] 
def b = ["foo", "qux"] 

assert ["bar", "baz", "baz", "qux"] == ((a - b) + (b - a)) 
9

Ben OP exclusive disjunction ikisi arasında listelerin istiyor varsayalım ?

(Not : Ne önceki çözümlerin çiftleri ele!)

Eğer Groovy kendiniz kod istiyorsanız, Aşağıdakiler

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 

Bir yakaladım, listeleri kullanıyor/ints dizileri. Polymorphic yöntemi kaldır (int) vs çıkarmak (Object) yüzünden probleminiz olabilir. See here for a (untested) solution. Sen "farkı" ile ne demek söylemek gerekir

@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'] 
İlgili konular