1

NSDictionaryの対応するキーの値が @であるキーの配列を取得しようとしています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ですか.

4

1 に答える 1

6

この種の抽象化により、多くの混乱が解消されます

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

NSLog(@"%@", results);
于 2012-11-02T14:58:32.240 に答える