2011-04-19 24 views

उत्तर

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

यदि आप ग्रोवी में माइनस ऑपरेटर का उपयोग करते हैं, तो यह [लिंक] के अनुसार प्रदर्शन की कमजोर पड़ सकती है (http://rewoo.wordpress.com/2012/11/19/the-weak-performance-of -the-groovy-minus-operator /) –

3

मुझे यकीन नहीं है कि "यूनियन के विपरीत" से आपका क्या मतलब है, लेकिन मेरा अनुमान है कि आप सममित अंतर (AKA सेट अंतर या संयोजन) का मतलब है। इस ऑपरेशन का परिणाम नीचे लाल रंग में दिखाया गया है।

enter image description here

दो जावा/ग्रूवी संग्रह पर यह कार्रवाई करने के लिए सबसे आसान तरीका अपाचे कॉमन्स संग्रह द्वारा प्रदान की disjunction विधि का उपयोग करने के लिए है।

+0

क्या यह सिर्फ '(ए + बी) - a.intersect (बी) 'जैसा कि मैंने अपना जवाब दिया है? चिंतित है कि मेरा जवाब अब गलत है ... –

+2

हां, यह आपके उत्तर के समान ही है, लेकिन मैं अपने स्वयं के निम्नतम अवांछित कार्यान्वयन को लिखने के लिए दूसरों के सिद्ध काम का उपयोग करने का पक्ष करता हूं :) –

+3

हाहा! _Ouch_!;-) –

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) 

अंत!