获取过滤值的字典键

时间:2015-07-14 07:21:40

标签: ios objective-c

我有NSMutableDictionary(subjectValue),其中包含值和键。我想根据搜索栏中搜索到的值进行过滤。所以,我使用了下面的代码。

NSArray *allvalues = [subjectValue allValues];
NSArray *filteredValues = [allvalues filteredArrayUsingPredicate:predicate];

现在,filteredValues将具有基于搜索词的值。

现在,我想获得Keys以获取上述结果的过滤值。我知道如何获取所有值和所有值,但我想获得过滤结果的密钥。

请告知我该怎么做?

这不是本问题的重复。 Existing Query Link

上述链接中提到的是,如何根据谓词搜索检索所有值。我要问的是超出这个范围。我已经获得了所有过滤值,我想获得过滤值的键。我的问题不同。

2 个答案:

答案 0 :(得分:1)

NSDictionary中有一个功能keysOfEntriesPassingTest。那是你在找什么?例如:

NSDictionary *subjectValue = @{@"1":@"A", @"2":@"B", @"3":@"C", @"4":@"D"};
NSArray *filteredValues = @[@"B", @"D"];


NSSet *keys = [subjectValue keysOfEntriesPassingTest:^BOOL(id key, id obj, BOOL *stop) {
    return [filteredValues containsObject:obj];
}];
NSLog(@"%@", keys.description);

我得到的输出是{(4,2)}(NSSet)

答案 1 :(得分:0)

我怀疑你是否可以通过类似谓词的方法获取给定值的键。 因此,如果您必须枚举字典,请使用类似

的内容
 __block NSMutableDictionary * filteredDictionary = [NSMutableDictionary dictionary];
  [subjectValue enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
    if ([obj matchesTheConditionOfThePredicate]) {
      filteredDictionary[key] = obj;
    }
  }];