2016-11-25 18 views
1

예 : 나는 두 개의 NSMutableArray이 있습니다. 하나 @[1,2,3,4,5,6,7]. 기타 그래서 두 번째 배열 더 효과적인 방법에서 필요한 객체를 추출 할 수있는 방법을다른 배열과 동일한 속성을 가진 배열에서 객체를 가져 오는 방법은 무엇입니까?

@[ 
    @{@idObjectToSearch":1, @"name":@"aaaaa", @"surname": @"bbbbb"}, @{@idObjectToSearch":2, @"name":@"aaaaa", @"surname": @"ccccc"}, 
    ... 
    @{@idObjectToSearch":100, @"name":@"aaaaa", @"surname": @"cccdcd"} 
]; 

같은 개체가?

+1

당신이 두 번째 배열에서 객체를 추출 할 내용에 따라이 두 배열 사이의 링크는 무엇입니까? – Rajat

+0

@Rajat "idObjectToSearch"로 모든 객체가 필요함 – Viktorianec

+0

두 번째 배열의 객체를'idObjectToSearch' 값으로 키잉 된 사전에로드하고 싶지 않다면 (그리고 이것은 내가 할 일입니다.) 사용하는 모든 기법은 선형이 될 것입니다 배열 검색 – Paulw11

답변

2

두 번째 배열에 NSPredicate을 사용해야합니다.

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"idObjectToSearch IN %@", firstArray]; 
//In above predicate instead of passing `1` you need to pass object from first array that you want. 

NSArray *filterArray = [secondArray filteredArrayUsingPredicate:predicate]; 

//Now access Array objects 
if (filterArray.count > 0) { 
    NSLog(@"%@",filterArray); 
} 
+0

이것은 하나의 객체 만 반환하지만 예제와 같이 모두 7 개가 필요합니다. OR을 사용하여 긴 술어를 작성할 수는 있었지만 이것이 제 경우에 좋은 방법이라고 생각하지 않았습니다. – Viktorianec

+0

@Viktorianec 그러면 'IN'을 사용하여 편집 된 답변을 확인해야합니다 –

1

당신은 당신의 정렬 된 데이터를 포함 할이

NSMutableArray * arrSorted = [NSMutableArray new]; 
for(int i=0;i<arr.count;i++) { 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"idObjectToSearch == %@", firstArray[i]]; 
    NSUInteger index = [secondArray indexOfObjectPassingTest:^(id obj, NSUInteger idx, BOOL *stop) { 
     return [predicate evaluateWithObject:obj]; 
    }]; 
    if (index != NSNotFound) { 
     [arrSorted addObject:[arrM objectAtIndex:index]]; 
    } 
} 

arrSorted처럼 할 수