2011-06-14 5 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

+0

지적 해 주셔서 고맙습니다. 'secondArray'는'c'를 포함하기위한 것입니다. 이를 반영하도록 코드 샘플을 수정했습니다. – 0x90

답변

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);