33

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

4

4 回答 4

70

查看父类(NSDictionary)

- (NSArray *)allKeysForObject:(id)anObject

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

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

于 2010-05-07T10:20:30.733 回答
19

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

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
于 2012-05-01T20:23:46.277 回答
6

看一眼:

- (NSArray *)allKeysForObject:(id)anObject
于 2010-05-07T10:19:35.853 回答
6

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;

    }];

查看此答案以获取更多详细信息

如何指定 NSDictionary 的 keysOfEntriesPassingTest 所需的块对象/谓词?

于 2012-09-26T14:14:52.050 回答