2010-02-16 4 views
1

2 개의 어레이가 있습니다. 하나는 600 개의 개체로 이루어진 대규모 정적 그룹이고 다른 하나는 10 개의 개체로 이루어진 작은 그룹입니다.NSArray - 배열에 객체가 있는지 확인 하시겠습니까?

두 그룹간에 공통된 개체를 가져 와서 새 배열에 넣고 싶습니다.

큰 그룹에 1 ~ 600의 600 개의 개체가 포함되어 있습니다. 작은 그룹에는 1, 2, 3, 4, 5, 6, a, b, c의 9 개의 개체가 포함됩니다. 객체 1, 2, 3, 4, 5, 6을 포함하는 새로운 배열을 만들 수 있기를 원합니다.

가장 좋은 방법은 무엇입니까? 당신은 다시 결과 배열을 정렬해야 뭔가

NSMutableSet *intersection = [NSMutableSet setWithArray:smallArray]; 
[intersection intersectSet:[NSSet setWithArray:bigArray]; 
NSArray *result = [NSArray arrayWithSet:intersection]; 

처럼

답변

10

NSArray이 필요합니까? 교차로의 경우 NSSet을 사용하는 것이 좋습니다. NSArrays 및 NSSet 사용에 대한 자세한 내용은 Cocoa with Love: NSArray or NSSet, NSDictionary or NSMapTable을 참조하십시오.

당신이 당신의 목적을 위해 사용할 수있는 방법 intersectSet:,이 새로운 NSMutableSet 만들 NSSet을 사용하는 경우 : 당신은 addObjectsFromArray: 방법을 사용하여 NSArray에서 NSMutableSet를 만들 수 있습니다

NSMutableSet *set1 = [[NSMutableSet alloc] initWithObjects:@"0", @"1", @"2", @"3", @"4", @"5", @"6", @"7", @"8", @"9", nil]; 
NSMutableSet *set2 = [[NSMutableSet alloc] initWithObjects:@"2", @"4", @"6", @"8", @"10", @"12", @"14", @"18", nil]; 

NSLog(@"set1: %@", set1); 
NSLog(@"set2: %@", set2); 
[set1 intersectSet:set2]; 
NSLog(@"isec: %@", set1); 

을 :

NSArray *array = [[NSArray alloc] initWithObjects:@"1", @"2", nil]; 
NSMutableSet *set = [[NSMutableSet alloc] init]; 
[set addObjectsFromArray:array]; 

당신은 또한 filterUsingPredicate: 방법을 사용하여 NSArray를 필터링 할 수 그것은 그러나 나는 결코 없다, 할 수있다 법과 그러므로 NSPredicate으로 ked하십시오. 따라서 이것은 단지 가정 일뿐입니다.

+0

이는 NSSet를 들어, 각 세트의 모든 개체가 고유해야한다는주의와 좋은 제안입니다 ...이 게시물이 시작 유용 될 수 있기를 바랍니다. 배열에 중복 값이있는 경우 [0,1,2,3,2,4], NSSet은 작동하지 않습니다. – TechZen

+0

반대로, NSSet은 (배열을 추가 할 때) 중복을 추가하지 않기 때문에 매우 유용합니다. 도움 주셔서 감사합니다. ComSubVie 및 MrMage. 그것 모두는 지금 일하고있다. –

+0

문제 공간에 따라 다릅니다. 얼마나 많은 중복이 존재하는지 기록하고 싶다면, 같은 객체/아이템의 복제물이더라도 NSSet은 작동하지 않습니다. – TechZen

5

가장 쉬운 (그러나 반드시 가장 빠른 (?)) 방법은 그러나이 될 것입니다.