2009-09-25 25 views
27

मेरे पास दो एनएसएआरआरएआर हैं, जो मैं करना चाहता हूं वह दो एरे की तुलना करना है जिसमें स्ट्रिंग्स हैं, समानताएं ढूंढें और पहले सरणी को फिर से बनाएं लेकिन इसलिए उनके पास समानताएं नहीं हैं।दो Arrays की तुलना

बस कुछ उदाहरण के लिए।

दो सरणियों:

NSArray *arrayOne = [NSArray arrayWithObjects:@"TD1", @"TD2", @"TD3", nil]; 
NSArray *arrayTwo = [NSArray arrayWithObjects:@"Blah", @"String", @"TD2", nil]; 

परिणाम:

NSArray *arrayOne = [NSArray arrayWithObjects:@"TD1", @"TD2", @"TD3", nil]; 

NSArray *arrayOneCopy = [NSArray arrayWithObjects:@"TD1", @"TD3", nil]; 
NSArray *arrayTwo = [NSArray arrayWithObjects:@"Blah", @"String", @"TD2", nil]; 

उत्तर

56
NSMutableArray *arrayOneCopy = [NSMutableArray arrayWithArray:arrayOne]; 
[arrayOneCopy removeObjectsInArray:arrayTwo]; 
28

उपयोग NSMutableSet:

NSMutableSet *setOne = [NSMutableSet setWithArray: arrayOne]; 
NSMutableSet *setTwo = [NSMutableSet setWithArray: arrayTwo]; 

[setOne minusSet: setTwo]; 

NSArray *arrayOneResult = [setOne allObjects]; 

(कडाई के setTwo, परिवर्तनशील होना जरूरी नहीं है सकते हैंभी हो(जो बेहतर प्रदर्शन करता है))

या अन्य व्यक्ति के उत्तर के रूप में एनएसएआरएआरई का उपयोग करें - यह भी काम करता है।

कौन सा काम पूरी तरह से आपके डेटा सेट आकार पर निर्भर करता है। डेटा के छोटे सेट के लिए, सरणी समाधान ठीक काम करता है। बड़े सेट के लिए, एनएसएससेट उस सदस्यता परीक्षण में अधिक कुशल होगा, एक हैश चेक है और रैखिक खोज नहीं है।

मापें और सबसे अच्छा काम करने वाले व्यक्ति का उपयोग करें।

+0

तो सरणी में आइटम के क्रम महत्वपूर्ण है, तो मुझे लगता है कि एक का उपयोग करने के लिए होगा के बीच विभिन्न वस्तुओं की संख्या देता है NSArray के साथ अन्य समाधान, है ना? –

+0

अच्छा जवाब, लेकिन जैसा कि आपने कहा था, मैं केवल डेटा के छोटे सेट का उपयोग कर रहा हूं इसलिए मैं दूसरे समाधान का उपयोग करने जा रहा हूं। फिर भी धन्यवाद! – Joshua

+0

Yup-- छोटे डेटा सेट के लिए, "newacct" का उत्तर जाने का तरीका है। – bbum

3
- (NSInteger)countOfDifferentObjects:(NSArray *)anotherArray { 

    NSSet * s = [NSSet setWithArray:self]; 
    NSMutableSet * s1 = [NSMutableSet setWithSet:s]; 
    NSSet * s2 = [NSSet setWithArray:anotherArray]; 

    [s1 unionSet:s2]; 
    [s1 minusSet:s]; 
    return [s1 count]; 
} 

यह दो सरणियों (तुलना isEqual साथ है)

array1 = @"A", @"B", @"C" 
array2 = @"B", @"D", @"Z" 
returns 2 (D and Z are different) 
संबंधित मुद्दे