2011-04-19 26 views
19

groovy集合中相交的相反方向是什么?Groovy集合中相交的相反方向

+0

这是非常相似,这是非常相似的http://stackoverflow.com/questions/2544258/how-can-i-compare-two-lists-in-groovy/2549647(不过这个问题有一个更好的标题) – 2011-04-20 01:35:38

回答

22

你可能要同时@Andre的答案相结合,@denis

我想你想要的是工会,然后从这个

def a = [1,2,3,4,5] 
def b = [2,3,4] 

assert [1,5] == (a + b) - a.intersect(b) 

由丹尼斯给出的解决方案减去路口将取决于你是否做

def opposite = leftCollection-rightCollection // [1,5] 

def opposite = rightCollection-leftCollection // [] 

我不认为你想要

5

难道是这个吗?

def leftCollection = [1,2,3,4,5] 
def rightCollection = [2,3,4] 
def opposite = leftCollection-rightCollection 
println opposite 

打印

[1,5] 
+2

如果您在Groovy中使用了minus运算符,则可能导致性能较弱,根据[link](http://rewoo.wordpress.com/2012/11/19/the-weak-performance-of -the-groovy-minus-operator /) – 2014-01-06 06:55:49

3

我不确定你的意思是“对立的工会”,但我的猜测是你的意思是对称差异(AKA设置差异或分离)。该操作的结果在下面显示为红色。

enter image description here

对两个Java/Groovy的集合执行该操作的最简单的方法是使用由Apache的公共集合中提供的方法disjunction

+0

当我放入我的答案时,那不仅仅是做“(a + b) - a.intersect(b)”吗?担心我的答案是不正确现在... – 2011-04-19 14:39:40

+2

是的,它完全一样的答案,但我倾向于使用证明别人的工作比写我自己的劣势未经测试的执行:) – 2011-04-19 14:50:12

+3

哈哈! _哎哟_!;-) – 2011-04-19 14:55:07

0
(a-b)+(b-a) 
// (a-b) return [1,5] 
//(b-a) return [] 
// TOTAL = [1,5]+[] 

这是当我们有:a=[1,2,3,4,5],b=[2,3,4,5]

OOP:

java.util.List.metaClass.oppIntersect={b-> 
    return ((delegate-b)+(b-delegate)) 
} 

然后

a.oppIntersect(b) 

END!