【问题标题】: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

上面链接中的问题是,如何根据谓词搜索检索所有值。我要问的还不止这些。我已经获得了所有过滤值,我想获得该过滤值的键。我的问题不同。

【问题讨论】:

  • 他们要问的是,如何根据谓词搜索检索所有值。我要问的还不止这些。我已经获得了所有过滤值,我想获得该过滤值的键。这个问题不同于stackoverflow.com/questions/16556905/…
  • 我知道得到所有的钥匙。请检查我的问题,我只需要获取某些值的密钥。
  • 您可以使用- keysOfEntriesPassingTest: 获取键的NSSet(基于将根据值评估的谓词),然后使用- objectsForKeys:notFoundMarker: 获取值的NSArray

标签: ios objective-c


【解决方案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;
    }
  }];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 2020-09-02
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    • 2011-01-27
    相关资源
    最近更新 更多