2013-03-31 10 views
5

कक्षा NSArray में, एक विधि isEqualToArray: है जो दो सरणी की तुलना करती है और इंगित करती है कि वे मेल खाते हैं या नहीं।ऑर्डर को अनदेखा करते हुए दो एरे की तुलना

मेरे पास दो सरणी हैं जिनमें विभिन्न क्रम में तत्व हैं। उदाहरण के लिए:

NSMutableArray* arr1 = [@[@"one", @"two", @"three"] mutableCopy]; 
NSMutableArray* arr2 = [@[@"three", @"one", @"two"] mutableCopy]; 

BOOL same = [arr1 isEqualToArray:arr2]; 
NSLog(@"%d", same); 

उपरोक्त उदाहरण में, भले ही arr1 और arr2 एक ही तत्व है, isEqualToArray:NO लौटा रहा है। for/while लूप में प्रत्येक तत्व के माध्यम से दोहराए बिना ऊपर वर्णित दो सरणी की तुलना कैसे कर सकता हूं?

+0

मार्टिनआर के इस बारे में चालाक उत्तर देखें: http://stackoverflow.com/questions/15709494/compare-two-arrays-with-the-same-value-but-with-a- अलग-अलग – Monolo

उत्तर

7

NSSet का उपयोग करें और फिर तुलना करें।

NSSet *set1=[NSSet setWithArray:arr1]; 
NSSet *set2=[NSSet setWithArray:arr2]; 

BOOL same=[set1 isEqualToSet:set2]; 

संपादित करें:

आप arr1 और arr2 में डुप्लिकेट हैं, तो उसके बाद का उपयोग करें:

NSCountedSet *set1=[NSCountedSet setWithArray:arr1]; 
NSCountedSet *set2=[NSCountedSet setWithArray:arr2]; 

BOOL same=[set1 isEqualToSet:set2]; 
+3

ध्यान दें कि यह केवल तभी काम करता है जब यह गारंटी दी जाती है कि किसी भी सरणी में कोई डुप्लिकेट नहीं है। यदि डुप्लिकेट मान हो तो एक 'NSCountedSet' चीजों का ख्याल रखना चाहिए। – rmaddy

+0

आपकी विधि के साथ सरणी (एक, दो, एक, तीन) और (तीन, दो, एक) बराबर नहीं होगी? चूंकि सेट के प्रत्येक तत्व अलग हैं। – Levi

+0

@ लेवी सही। यही कारण है कि 'एनएसएसएटीटी' के बजाय 'एनएससीएटेड एससेट 'का उपयोग किया जाना चाहिए। – rmaddy

3

मैं सुझाव है कि आप दोनों सरणियों को सॉर्ट, और विधि आप की कोशिश की है के साथ परिणाम की तुलना ।

+1

यह केवल तभी काम करेगा जब सभी तत्व तुलनात्मक हों, उदाहरण के लिए असफल होने पर सरणी में स्ट्रिंग्स और संख्याएं, या मनमानी ऑब्जेक्ट्स होते हैं जिनमें तुलनात्मक विधि नहीं होती है। –

+0

@MartinR यह संभव है, लेकिन मैंने कोई भी नहीं देखा है जो एकाधिक डेटा प्रकारों के साथ 2 एरे की तुलना करना चाहता था। आप उस मामले में उनकी तुलना कैसे करेंगे? – Levi

+1

सभी ऑब्जेक्ट्स 'हैश' और' isEqual' लागू करते हैं (और यही वह है जो [NSSet setWithArray: ...] 'या बेहतर' [NSCountedSet setWithArray: ...] 'उपयोग करता है), ताकि विधि मनमानी वस्तुओं के साथ काम करे। –

संबंधित मुद्दे