2011-04-19 3 views
19

groovy 컬렉션에서 intersect와 반대가되는 것은 무엇입니까?그루비 컬렉션에서 교차점의 반대

+0

이것은 다음과 매우 유사합니다. http://stackoverflow.com/questions/2544258/how-can-i-compare-two-lists-in-groovy/2549647 (하지만이 질문의 제목이 더 좋습니다.) –

답변

22

당신은 아마 모두 @Andre에서 답변을 결합하려는 및

내가 당신이 원하는 것은 노동 조합 된 후 달려 데니스에 의해 주어진이

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

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

솔루션에서 교회법을 뺄 생각 @denis 에 당신은

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에서 빼기 연산자를 사용하면 [link] (http://rewoo.wordpress.com/2012/11/19/the-weak-performance-of)에 따르면 성능이 약해질 수 있습니다. -the-groovy-minus-operator /) –

3

나는 "노조의 반대"라는 말을 분명히하지 않지만, 내 생각에 당신은 대칭 차이 (Aka set difference or disjunction)를 의미한다고 생각한다. 이 작업의 결과는 아래 빨간색으로 표시됩니다.

enter image description here

두 개의 자바/멋져요 컬렉션에서이 작업을 수행하는 가장 쉬운 방법은 아파치 평민 컬렉션에서 제공하는 disjunction 방법을 사용하는 것입니다.

+0

대답에 넣은대로'(a + b) - a.intersect (b) '를 수행하지 않습니까? 내 대답이 올바르지 않은 것 같아서 ... –

+2

예, 답변과 정확히 똑같습니다. 그러나 내 테스트되지 않은 구현을 작성하는 것보다 입증 된 작업을 사용하는 것이 유리합니다. –

+3

하하! _아야_!;-) –

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!