2013-07-12 7 views
6

में तीसरे सरणी के लिए अलग ऑब्जेक्ट प्राप्त करें, मैं 2 NSMutableArray की तुलना करना चाहता हूं और विभिन्न ऑब्जेक्ट को तीसरे Array में प्राप्त करना चाहता हूं। मैं उसे कैसे कर सकता हूँ ?2 nsmutablearray की तुलना करें और आईओएस

Array1 लूप ऑब्जेक्ट कर सकते हैं।

Array1 = "a", "b","c","d","a","b","c"; 
Array2 = "a", "b", "c"; 

और फिर परिणाम

Array3 = "d"; 

अग्रिम धन्यवाद सेट के संचालन के लिए

+0

array3 चाहिए बस हो '[" डी "]', या यह 'होना चाहिए [" बी "," डी "] ', आपका प्रश्न स्पष्ट नहीं है कि' diff object 'का अर्थ क्या है? – Wain

+0

क्या ऑब्जेक्ट स्ट्रिंग हैं? साथ ही, क्या आप समानता की तलाश कर रहे हैं (मान समान है) या पहचान (जो सरणी 1 में ऑब्जेक्ट्स समान स्मृति में सरणी 2 में ऑब्जेक्ट्स पर कब्जा करती है)? – Maarten

+0

@Wain: मैंने अपना प्रश्न संपादित किया – NGOT

उत्तर

20

उपयोग सेट:

NSSet *set1 = [NSSet setWithArray:array1]; 
NSMutableSet *set2 = [NSMutableSet setWithArray:array2]; 
[set2 minusSet:set1]; 
+1

+1 @NGOT एनएसएससेट का उपयोग कर कुशल है। –

+0

मैं कोड से ऊपर की कोशिश कर रहा हूं लेकिन कंसोल सेट 2 में हमेशा = 0 – NGOT

+0

@NGOT, क्या आप सच में स्ट्रिंग अक्षर का उपयोग कर रहे हैं, या कस्टम क्लास की कुछ ऑब्जेक्ट्स? – vikingosegundo

5
NSMutableArray *gotDiffArry= [[NSMutableArray alloc] init]; 
for(int i = 0 ; i < FirstArray.count; i++) { 
    if(i < seconArray.count){ 
     if(![seconArray[i] isEqual:firstArray[i]]){ 
      [gotDiffArry addObject:[NSNumber numberWithInt:i]]; 
     } 
    } else { 
     [gotDiffArry addObject:[NSNumber numberWithInt:i]]; 
    } 
} 

संपादित:

for (int i = 0 ; i < firstArray.count ; i ++) 
{ 

NSString *search = [firstArray objectAtIndex:i]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY SELF CONTAINS %@", search]; 
NSMutableArray *temAraay = [secondArray filteredArrayUsingPredicate: predicate]; 
if(temArray.count >=0) 
{ 
    NSLog("%@", [temArray objectAtIndex:0]); 
} 
} 
+0

किस प्रकार का अलग इंडेक्स? – NGOT

+0

यह बहुत ही सक्रिय और समय लेने वाला है अगर सरणी बड़ी हैं। कोई प्रभावी तरीका नहीं है। –

+0

धन्यवाद, लेकिन मैं केवल ऑब्जेक्ट नहीं लेना चाहता हूं, सभी ऑब्जेक्ट नहीं। – NGOT

8

आप इसे भी आजमा सकते हैं।

NSMutableArray *array1 = [[NSMutableArray alloc]initWithObjects:@"1",@"2",@"3",@"1", nil]; 
NSMutableArray *array2 = [[NSMutableArray alloc]initWithObjects:@"2",@"1", nil];  

NSMutableArray *largeArray; 
NSMutableArray *shortArray; 
if([array1 count] > [array2 count]){ 
    largeArray = array1; 
    shortArray = array2; 
} else { 
    largeArray = array2; 
    shortArray = array1; 
} 
[largeArray removeObjectsInArray:shortArray]; 

for (NSString *va in largeArray) { 
    NSLog(@"%@",va); 
} 
+0

HOW यह निर्धारित कर सकता है कि कौन सा बड़ा है और कौन सा छोटा है? –

+0

@RanjuPatel आपके जैसे सरणी है जिसमें आप डुप्लीकेट (डुप्लिकेट सरणी में भी हैं) की जांच करना चाहते हैं। – Buntylm

4

मैं निम्नलिखित का इस्तेमाल किया है और कर ली वांछित परिणाम:

for(int i =0; i<[arraytwo count]; i++) 
{ 
    if (![arrayone containsObject:[arraytwo objectAtIndex:i]]) 
     [arraythree addObject: [arraytwo obectAtIndex:i]]; 
}  
NSLog(@"%@",arraythree); 
+0

संभवतः सेट दृष्टिकोण से अधिक कुशल (कम से कम छोटे सरणी के लिए)। –

+0

मैं इसे बड़े सरणी के लिए भी उपयोग कर रहा हूं। इसमें बड़ी सरणी के लिए कुछ समय लग सकता है, लेकिन मैं इसे पृष्ठभूमि में कर रहा हूं इसलिए ठीक काम करता है। –

+0

हाँ, यह सिर्फ इतना है कि मैंने विभिन्न योजनाओं के लिए "बड़े ओ" अनुमान से गुजरना नहीं है। शायद सेट दृष्टिकोण बड़े सेटों के लिए एक बाल अधिक कुशल है, लेकिन इसके लिए आपको हजारों तत्वों में महत्वपूर्ण होना चाहिए। –

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