2012-12-09 2 views
0

안녕하세요 두 개의 배열이 하나의 200 + 개체 (절대 변경) 및 정수 배열입니다 (NSNumber 개체로) 어떤 것이 가장 쉬운 방법은 세 번째 배열을 만들 수 있습니다 배열 2의 인덱스 배열에 포함되는 배열 1의 모든 객체 배열?목표 C는 인덱스에서 인덱스를 추출합니다

+0

두 번째 배열 대신'NSIndexSet'을 사용할 수 있다면. 그럼 그냥'[array1 objectsAtIndexes : indexSet]' –

+0

두 가지 해결책을 모두 볼 수 있습니다. u가 실제로 원하는 것을 이해하는 예제를 줄 수 있습니까? –

답변

2

하나의 옵션의 방법을 사용할 수 있습니다 objectsAtIndexes:

NSArray *objects = @[@"A", @"B", @"C", @"D", @"E", @"F", @"G"]; 
NSArray *indexArray = @[@(0), @(2), @(6)]; 

NSMutableIndexSet *indexSet = [NSMutableIndexSet indexSet]; 
for (NSNumber *number in indexArray) { 
    [indexSet addIndex:[number unsignedIntegerValue]]; 
} 
NSArray *filtered = [objects objectsAtIndexes:indexSet]; 

결과 : A, C, G

물론 가능하다면, 인덱스 세트 대신에 인덱스 세트를 직접 사용하는 것이 좋습니다. n 어레이.

아니면 그냥 간단한 루프를 사용할 수 있습니다.

NSMutableArray *filtered = [[NSMutableArray alloc] 
          initWithCapacity:indexArray.length]; 
for (NSNumber *number in indexArray) { 
    [filtered addObject:objects[[number unsignedIntegerValue]]]; 
} 
+0

감사합니다.이 대답은 제가 찾고있는 것이 었습니다. 마지막 질문 내 배열 내가 다시 얻을 (필터) 위의 코드와 함께 imutable 배열된다, 내가 어떻게 그것을 추가 필터링 할 수 있도록 변경할 수있는 배열로 생성합니까? – user1096447

+0

'NSMutableArray * filtered = [NSMutableArray arrayWithArray : [objects objectsAtIndexes : indexSet]]; – DrummerB

1

당신은 세트를 만들고 NSIndexSet에 인덱스의 배열을 변환 한 후 사용하는 것이 NSMutableSet

NSArray *array1 = @[ @1, @2, @3 ]; 
NSArray *array2 = @[ @2 ]; 

NSMutableSet *set = [NSMutableSet setWithArray:array1]; 
[set intersectSet:[NSSet setWithArray:array2]]; 

NSLog(@"%@", set.allObjects); 

//=>(2) 
+0

나는 그것이 그가 찾고있는 것이라고 생각하지 않는다. – DrummerB

+0

@DrummerB ... 단어로 질문 단어를 읽으면 실제로 정답입니다. –

+0

나는 그것이 그가 의미하는 것이면 "물체"대신에 "200+ 숫자"라고 말했을 것이라고 생각하지만, 당신 말이 맞습니다. 명확하게 공식화 된 질문은 아닙니다. – DrummerB