2011-06-14 449 views
2

我正在尋找一種方法來比較兩個NSMutableArray對象的內容。這兩個數組都填充了NSMutableDictionaries,它們分開分配,但偶爾包含相同的數據。比較NSMutableArray元素的值

簡化的例子:

NSMutableArray *firstArray = [[NSMutableArray alloc] init]; 
NSMutableArray *secondArray = [[NSMutableArray alloc] init]; 

NSMutableDictionary *a = [[NSDictionary alloc] init]; 
[a setObject:@"foo" forKey:"name"]; 
[a setObject:[NSNumber numberWithInt:1] forKey:"number"]; 

NSMutableDictionary *b = [[NSDictionary alloc] init]; 
[b setObject:@"bar" forKey:"name"]; 
[b setObject:[NSNumber numberWithInt:2] forKey:"number"]; 

NSMutableDictionary *c = [[NSDictionary alloc] init]; 
[c setObject:@"foo" forKey:"name"]; 
[c setObject:[NSNumber numberWithInt:1] forKey:"number"]; 

[firstArray addObject:a]; 
[firstArray addObject:b]; 
[secondArray addObject:c]; 

a,b和c是不同的對象,但a和c匹配的內容。

我在找什麼是比較firstArray和secondArray並僅返回b的函數/方法。

僞代碼:

NSArray *difference = [self magicFunctionWithArray:firstArray andArray:secondArray]; 
NSLog(@"%@",difference) 

=> ({name="bar"; number=2}) 

預先感謝您。

+0

您是不是指'secondArray'裏面有'a'和'b'?因爲現在它只是空的,我不確定爲什麼第二個元素是特殊的。 – Chuck 2011-06-14 17:59:13

+0

謝謝你指出。 'secondArray'是爲了包含'c'。修復了代碼示例以反映這一點。 – 0x90 2011-06-14 18:18:02

回答

6

這可以使用NSMutableSet實例來實現。

NSMutableSet * firstSet = [NSMutableSet setWithArray:firstArray]; 
NSMutableSet * secondSet = [NSMutableSet setWithArray:firstArray]; 

[firstSet unionSet:[NSSet setWithArray:secondArray]]; 
[secondSet intersectSet:[NSSet setWithArray:secondArray]]; 

[firstSet minusSet:secondSet]; 

NSLog(@"%@", firstSet);