获取过滤值的字典键
Posted
技术标签:
【中文标题】获取过滤值的字典键【英文标题】:Getting Dictionary Keys for the Filtered Values 【发布时间】:2015-07-14 07:21:40 【问题描述】:我有包含值和键的 NSMutableDictionary (subjectValue)。我想根据在搜索栏中搜索的值进行过滤。所以,我使用了如下代码。
NSArray *allvalues = [subjectValue allValues];
NSArray *filteredValues = [allvalues filteredArrayUsingPredicate:predicate];
现在,filteredValues 将具有基于搜索词的值。
现在,我还想获取从上述结果中获得的过滤值的键。我知道如何获取所有值和所有值,但我想获取过滤结果的键。
请告诉我怎样才能得到它?
这不是这个问题的重复。 Existing Query Link
上面链接中的问题是,如何根据谓词搜索检索所有值。我要问的还不止这些。我已经获得了所有过滤值,我想获得该过滤值的键。我的问题不同。
【问题讨论】:
这不是***.com/questions/16556905/…的重复 他们要问的是,如何根据谓词搜索检索所有值。我要问的还不止这些。我已经获得了所有过滤值,我想获得该过滤值的键。这个问题不同于***.com/questions/16556905/… 试试***.com/questions/7057063/… 我知道得到所有的钥匙。请检查我的问题,我只需要获取某些值的密钥。 您可以使用- keysOfEntriesPassingTest:
获取键的NSSet
(基于将根据值评估的谓词),然后使用- objectsForKeys:notFoundMarker:
获取值的NSArray
。
【参考方案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)
【讨论】:
没有。我想,我的问题无法理解。我已经有了“价值观”。即“NSMutableDictionary setObject:subjectValue Key:keys”。在此,它包含所有值“NSArray *allvalues = [subjectValue allValues];”然后,我根据搜索词进行过滤以获取一些特定值。这已放入“filteredValues”数组。现在,我想获取“值(filteredValues)”所拥有的“KEYS”。 在您的示例中,您有 KEYS -> [@"B", @"D"] ?您从中获得了价值吗?对吗? 另外,[valuesToLookFor obj] 行给出错误,因为 NSArray 没有可见接口声明选择器 obj 在我的示例中,键是数字,即 1、2、3 和 4 是键(抱歉,上面的内容是创建字典的快速方法,但可能不太清楚. 格式为@key1:value1, key2:value2... 我在上面修复了我的代码 我修改了示例以使用我认为是您的变量名【参考方案2】:我怀疑您是否可以通过类似谓词的方法获取给定值的键。 因此,如果您无论如何都必须枚举字典,请使用类似这样的东西
__block NSMutableDictionary * filteredDictionary = [NSMutableDictionary dictionary];
[subjectValue enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop)
if ([obj matchesTheConditionOfThePredicate])
filteredDictionary[key] = obj;
];
【讨论】:
以上是关于获取过滤值的字典键的主要内容,如果未能解决你的问题,请参考以下文章