2010-05-07 45 views

回答

67

看向父类(的NSDictionary)

- (NSArray *)allKeysForObject:(id)anObject 

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

也许你需要保持某种形式的额外的索引结构结构(S)的,让你找到关于在其中一些临界值的对象,联系到没有直接对象比较关键

6

看看:

- (NSArray *)allKeysForObject:(id)anObject 
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 
6

这是绝对有可能与NSDictionary中的块法

- (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?

相关问题