2010-03-16 4 views
2

모든 NSDictionary에 "Area == North"(예 :)가있는 NSDictionaries의 새 배열을 반환 할 수있게하려는 NSDictionary 개체의 NSArray가 있습니다. .여러 키를 기반으로 NSArray에서 전체 NSDictionaries를 필터링합니다.

지금까지 찾은 가장 가까운 예는 Using NSPredicate to filter an NSArray based on NSDictionary keys이지만이 키를 가진 사전이 아니라 주어진 키의 고유 값을 반환합니다. 유사한 작업을 수행하고 전체 사전을 반환 할 수있는 방법이 있습니까?

답변

2

쉽게 충분히 소리 :

NSMutableArray *a = [NSMutableArray array]; 
[a addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"North", @"Area", @"North", @"Test", nil]]; 
[a addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"South", @"Area", @"North", @"Test", nil]]; 
[a addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"East", @"Area", @"North", @"Test", nil]]; 
NSPredicate *p = [NSPredicate predicateWithFormat:@"%K matches %@", @"Area", @"North"]; 
NSArray *newArray = [a filteredArrayUsingPredicate:p]; 
NSLog(@"newArray:%@", [newArray description]); 

의미가 있습니다 :

NSArray *unfilteredDictionaries; // however you get this... 
NSMutableArray *filteredDictionaries = 
    [NSMutableArray arrayWithCapacity:[unfilteredDictionaries count]]; 
NSDictionary *dict; 
for (dict in unfilteredDictionaries) 
    if ([[dict valueForKey:@"Area"] isEqualToString:@"North"]) 
    [filteredDictionaries addObject:dict]; 

return filteredDictionaries; 
9

자 NSPredicate는 잘 작동합니다, 나는이 시도했다.

관련 문제