2011-04-09 3 views
1

그래서 여러 개의 NSArrays (실제로 5)가 있고 모든 배열에 공통된 객체 만 포함하는 새 NSArray를 만들고 싶습니다. 이 작업을 수행하는 효율적인 방법이 있습니까? 내가 생각할 수있는 유일한 방법은 각 객체를 비교하는 모든 배열을 반복하는 것입니다.다중 NSArray 및 공통 객체

+0

나는 당신의 의견에 간단한 해결책을 찾는 언급 –

+0

... 당신이 그들을 통해 루프 생각합니다 이전 질문에 당신은 정교 할 수 있습니까? – ChrisHaze

+0

@ChrisHaze 아, 미안하지만, 내 해결책으로 내 원래 질문을 편집했습니다. 내가 그것을 새로운 대답으로 추가하고 올바른 것으로 받아들입니다. :) – gypsyDev

답변

3

: 여기

몇 가지 예제 코드입니다

NSMutableSet *set = [NSMutableSet setWithArray:array]; 
NSMutableSet *set1 = [NSMutableSet setWithArray:array2]; 
NSMutableSet *set2 = [NSMutableSet setWithArray:array3]; 
NSMutableSet *set3 = [NSMutableSet setWithArray:array4]; 
NSMutableSet *set4 = [NSMutableSet setWithArray:array5]; 

[set intersectSet:set1]; 
[set intersectSet:set2]; 
[set intersectSet:set3]; 
[set intersectSet:set4]; 

NSArray *allArray = [set allObjects]; 
+0

내 목표는 일치하는 인스턴스의 합계를 계산하고 비슷한 시나리오를 취한 것이지만 정확하게는 아닙니다. 게시 해 주셔서 감사합니다 : NSArrays의 모든 내용을 덤핑 한 후 NSCountedSet 접근 방식을 사용하기로 결정했습니다. 그래도 확장성에 대해서는 잘 모르겠습니다. @ gypsyDev 다시 감사합니다. – ChrisHaze

3

NSSet (실제로는 NSMutableSet)을 생성하고 5 개의 모든 배열의 내용을 덤프 한 다음 NSSet에서 새 NSArray를 생성해야하는 이유는 무엇입니까?

죄송합니다. 원래 질문을 잘못 읽었습니다. 네, 중복을 찾기 위해 각각 하나씩 반복해야한다고 생각합니다. 그러나 구현이 너무 끔찍하지는 않습니다 (그러나 배열이 거대한 경우 런타임이 다소 느릴 수 있음). 나는 아주 잘 작동하는이를 사용하여 종료

- (void) filterSet: (NSMutableSet*)set withArray: (NSArray*) array { 
    NSMutableSet* removals = [NSMutableSet setWithCapacity:[array count]]; 
    for (id obj in set) { 
     if (! [array containsObject: obj]) { 
      [removals addObject: obj]; 
     } 
    } 
    [set minusSet: removals]; 
} 

NSMutableSet* mySet = [NSMutableSet setWithCapacity:[array1 count] * 5]; 
[mySet addObjectsFromArray: array1]; 
[self filterSet: mySet withArray: array2]; 
[self filterSet: mySet withArray: array3]; 
[self filterSet: mySet withArray: array4]; 
[self filterSet: mySet withArray: array5]; 

NSArray* filteredArray = [mySet allObjects]; 
+0

모든 객체를 포함하는 배열을 만들지 만, 나는 단지 중복을 원한다. NSSet은 내가 찾고있는 것이라고 생각하지만,이 방법을 발견했다 : intersectSet : – gypsyDev

+0

@gypsyDev - 아, 미안하지만, 모든 중복을 원한다. 이것은 그 반대입니다. 나는 잘못 읽고 모든 유니크를 원한다고 생각했습니다. – aroth

+0

@gypsyDev - 알았습니다. 중복 된 것을 찾고 유지하기 위해 패치를했습니다. – aroth