ग्रोवी संग्रह में अंतरण के विपरीत क्या होगा?ग्रोवी संग्रह में छेड़छाड़ के विपरीत
उत्तर
आप शायद गठबंधन करने के लिए दोनों @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 // []
चाहे
जो मुझे नहीं लगता कि आप
क्या यह हो सकता है?
def leftCollection = [1,2,3,4,5]
def rightCollection = [2,3,4]
def opposite = leftCollection-rightCollection
println opposite
प्रिंटों
[1,5]
यदि आप ग्रोवी में माइनस ऑपरेटर का उपयोग करते हैं, तो यह [लिंक] के अनुसार प्रदर्शन की कमजोर पड़ सकती है (http://rewoo.wordpress.com/2012/11/19/the-weak-performance-of -the-groovy-minus-operator /) –
उपयोग चौराहों
assert [4,5] == [1,2,3,4,5].intersect([4,5,6,7,8])
उपयोग के लिए + यूनियनों के लिए एक दूसरे को काटना:
assert [1,2,3,4,5] == [1,2,3] + [4,5]
http://groovy.codehaus.org/groovy-jdk/java/util/Collection.html
देखनामुझे यकीन नहीं है कि "यूनियन के विपरीत" से आपका क्या मतलब है, लेकिन मेरा अनुमान है कि आप सममित अंतर (AKA सेट अंतर या संयोजन) का मतलब है। इस ऑपरेशन का परिणाम नीचे लाल रंग में दिखाया गया है।
दो जावा/ग्रूवी संग्रह पर यह कार्रवाई करने के लिए सबसे आसान तरीका अपाचे कॉमन्स संग्रह द्वारा प्रदान की disjunction विधि का उपयोग करने के लिए है।
क्या यह सिर्फ '(ए + बी) - a.intersect (बी) 'जैसा कि मैंने अपना जवाब दिया है? चिंतित है कि मेरा जवाब अब गलत है ... –
हां, यह आपके उत्तर के समान ही है, लेकिन मैं अपने स्वयं के निम्नतम अवांछित कार्यान्वयन को लिखने के लिए दूसरों के सिद्ध काम का उपयोग करने का पक्ष करता हूं :) –
हाहा! _Ouch_!;-) –
(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)
अंत!
यह बहुत समान है http://stackoverflow.com/questions/2544258/how-can-i-compare-two-lists-in-groovy/2549647 (लेकिन इस प्रश्न का एक बेहतर शीर्षक है)) –