如何从NSMutableDictionary获取给定对象的密钥?

don*_*ile 31 iphone nsmutabledictionary

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

Kev*_*vin 69

查看父类(NSDictionary)

- (NSArray *)allKeysForObject:(id)anObject
Run Code Online (Sandbox Code Playgroud)

这将返回给定对象值的所有键的NSArray.它通过向字典的每个对象发送isEqual消息来实现这一点,因此对于大型数据集而言,这可能不是最佳性能.

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


Add*_*Dev 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
Run Code Online (Sandbox Code Playgroud)


Tom*_*ing 6

看一眼:

- (NSArray *)allKeysForObject:(id)anObject
Run Code Online (Sandbox Code Playgroud)


val*_*dyr 6

使用NSDictionary的块方法肯定是可能的

- (NSSet *)keysOfEntriesPassingTest:(BOOL (^)(id key, id obj, BOOL *stop))predicate;
Run Code Online (Sandbox Code Playgroud)

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

像这样使用它:

    NSSet *keys = [myDictionary keysOfEntriesPassingTest:^BOOL(id key, id obj, BOOL *stop) {

       BOOL found = (objectForWhichIWantTheKey == obj);
       if (found) *stop = YES;
       return found;

    }];
Run Code Online (Sandbox Code Playgroud)

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

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