【问题标题】:How to get the key for a given object from an NSMutableDictionary?如何从 NSMutableDictionary 中获取给定对象的密钥?
【发布时间】:2010-05-07 10:02:52
【问题描述】:

我有一个对象在一个大的 NSMutableDictionary 中,需要找出它有哪个键。所以我想从两列中查找那个“表”。不仅可以使用键,还可以使用对象(获取键)。这可能吗?

【问题讨论】:

    标签: iphone nsmutabledictionary


    【解决方案1】:

    查看父类(NSDictionary)

    - (NSArray *)allKeysForObject:(id)anObject
    

    这将返回给定对象值的所有键的 NSArray。 但是它通过向 Dictionary 的每个对象发送 isEqual 消息来做到这一点,因此对于您的大型数据集,这可能不是最佳性能。

    也许您需要保存某种形式的附加索引结构结构,以允许您在其中的某些关键值上定位对象,链接到键而无需直接进行对象比较

    【讨论】:

      【解决方案2】:

      要以更具体的方式回答您的问题,请使用以下命令获取特定对象的密钥:

      NSString *knownObject = @"the object";
      NSArray *temp = [dict allKeysForObject:knownObject];
      NSString *key = [temp objectAtIndex:0];
      
      //"key" is now equal to the key of the object you were looking for
      

      【讨论】:

        【解决方案3】:

        看看:

        - (NSArray *)allKeysForObject:(id)anObject
        

        【讨论】:

          【解决方案4】:

          NSDictionary 的 block 方法绝对可以做到这一点

          - (NSSet *)keysOfEntriesPassingTest:(BOOL (^)(id key, id obj, BOOL *stop))predicate;
          

          您需要返回满足某些条件(谓词)的对象。

          像这样使用它:

              NSSet *keys = [myDictionary keysOfEntriesPassingTest:^BOOL(id key, id obj, BOOL *stop) {
          
                 BOOL found = (objectForWhichIWantTheKey == obj);
                 if (found) *stop = YES;
                 return found;
          
              }];
          

          查看此答案了解更多详情

          How do I specify the block object / predicate required by NSDictionary's keysOfEntriesPassingTest?

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-01-16
            • 2016-08-11
            • 1970-01-01
            • 1970-01-01
            • 2019-10-12
            • 1970-01-01
            相关资源
            最近更新 更多