我有NSMutableDictionary(subjectValue),其中包含值和键。我想根据搜索栏中搜索到的值进行过滤。所以,我使用了下面的代码。
NSArray *allvalues = [subjectValue allValues];
NSArray *filteredValues = [allvalues filteredArrayUsingPredicate:predicate];
现在,filteredValues将具有基于搜索词的值。
现在,我想获得Keys以获取上述结果的过滤值。我知道如何获取所有值和所有值,但我想获得过滤结果的密钥。
请告知我该怎么做?
这不是本问题的重复。 Existing Query Link
上述链接中提到的是,如何根据谓词搜索检索所有值。我要问的是超出这个范围。我已经获得了所有过滤值,我想获得过滤值的键。我的问题不同。
答案 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;
}
}];