2012-11-02 47 views
1

我試圖獲得一個鍵的數組,其中值爲NSDictionary的對應鍵爲@YES從NSDictionary獲取包含NSNumber bools的鍵的列表,其中的值是@YES

對於EG ,: 開始解釋:

NSDictionary* dict = @{@"key1" : @YES, @"key2": @YES, @"key3": @NO, @"key4": @NO}; 

所需的結果:

NSArray* array = @[@"key1", @"key2"]; 

我試着用NSPredicates和subpredicates這樣做,但不能找到一個做了什麼,我想要的。我的「工作」,但醜陋的解決方案是:

NSMutableArray* array = [[NSMutableArray alloc] initWithCapacity:0]; 
NSDictionary* dict = @{@"key1" : @YES, @"key2": @YES, @"key3": @NO, @"key4": @NO}; 
for (NSString* key in [dict allKeys]) { 
    if ([[dict objectForKey:key] isEqualToNumber:@YES]) 
     [array addObject:key]; 
} 

什麼是這樣做,可能與NSPredicates更好的辦法?

回答

6

這種抽象的很多雜亂的走

NSArray *results = [dict keysOfEntriesPassingTest:^(id key, id obj, BOOL *stop) { 
    return [obj isEqualToNumber:@YES]; 
}].allObjects; 

NSLog(@"%@", results); 
+1

謝謝!這正是我知道我可以做但不知道如何做的事情。 – SimpsOff

相關問題