【问题标题】:How i can get key by the value? [duplicate]我如何通过值获取密钥? [复制]
【发布时间】:2012-11-15 21:30:25
【问题描述】:

可能重复:
How i can fetch array in xcode?

如何通过值获取密钥?

现在我通过键获取值,如下所示:

NSString *valueStr = [dict objectForKey:@"Key2"];

我需要按值获取键。

【问题讨论】:

  • 你为什么需要这个,我能看到如何做到这一点的唯一方法是遍历所有属性并检查值。但在我看来,这只是糟糕的设计,永远都不需要。
  • 您应该更改您的问题“我如何通过值获取密钥?”

标签: objective-c ios


【解决方案1】:
for (NSString* key in [dictionary allKeys]) {
   NSString* value = [dictionary objectForKey:key]
   if(value equalsToString:@"SearchedValue") {
      searchedValue = value;
      keyForSearchedValue = key;
}

但这不是推荐的编码方式。相反,您应该按键搜索,而不是按值搜索。 请不要为同一主题创建 3 个新问题。

【讨论】:

    【解决方案2】:
    NSString *valueStr = ...;
    NSArray *keys = [dict allKeysForObject:valueStr];
    

    返回一个数组,其中包含字典中具有给定值的所有键。

    【讨论】:

      【解决方案3】:

      这是一项昂贵的操作,因为 NSDictionary(与任何 map 集合类一样)旨在通过键保存值。

      但是,您可以这样做(假设键和值都是NSString):

      NSString *wantValue = @"tulips";
      for (NSString *name in dict)
      {
          NSString *value = [dict objectForKey:name];
          if ([value isEqualToString:wantValue])
          {
              NSLog(@"name '%@' matches", name);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-23
        • 1970-01-01
        • 2021-01-08
        • 2022-07-11
        相关资源
        最近更新 更多