获取过滤值的字典键

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;
    
  ];

【讨论】:

以上是关于获取过滤值的字典键的主要内容,如果未能解决你的问题,请参考以下文章

如何使用映射或过滤器而不是列表推导过滤特定值的嵌套字典(pythonic 方式)?

如何在 C# 字典中按值索引过滤项目?

如何过滤 dict 以仅选择大于值的键? [复制]

python根据键值过滤字典列表

如何根据对应的值过滤字典键

快速过滤 [[NSDictionary]]