ObjC:NSDictionary allKeysForObject *包含*(这可能吗?)

时间:2012-08-09 18:13:57

标签: objective-c nsdictionary

我是Objective-C的新手,遇到了NSDictionary方法allKeysForObject:。似乎非常有用。但是,我有一个NSDictionary,它有几个NSArrays(全长为2),并且由NSStrings键入。基本上,键是项,数组定义它们的两个属性。如果我想拉出具有某个属性的所有项目名称,可以使用类似allKeysForObject的内容来完成,或者我应该只是循环遍历字典并生成一个可变数组(似乎效率低下)。

我会包含一个代码段,但我觉得这个问题很有概念,代码不会真正澄清任何内容。哦,到底是怎么回事。这是一些简化的代码:

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:[NSArray arrayWithObjects:[NSNumber numberWithInt:1],[NSNumber numberWithInt:2],nil],@"Car",[NSArray arrayWithObjects:[NSNumber numberWithInt:2],[NSNumber numberWithInt:3],nil],@"Boat",nil];
NSLog(@"%@",[dict allKeysForObject:???]); // this is the line I am not at all sure about.
编辑:感谢您的回复。不过,我不清楚我的问题。我正在寻找一种更通用的方法。我不想检索特定对象的所有键,比如[1,2],但是我想在字典中查找包括NSNumber 1在内的所有数组并返回这些键。因此,如果我添加@"Plane",[NSArray arrayWithObjects:[NSNumber numberWithInt:1],[NSNumber numberWithInt:3],nil],我想以某种方式查询NSNumber 1并获取@"Car"@"Plane"。我感觉这不是这个方法的目的。

2 个答案:

答案 0 :(得分:5)

您正在寻找-keysOfEntriesPassingTest: ...

NSArray * selectedKeys = [dict keysOfEntriesPassingTest:^(id key, id obj, BOOL *stop)
                          {
                              return [obj containsObject:[NSNumber numberWithInt:2]];
                          }];

答案 1 :(得分:-2)

在您的示例中,如果您致电

[dict allKeysForObject: [NSArray arrayWithObjects: 
                            [NSNumber numberWithInt:2],
                            [NSNumber numberWithInt:3],
                            nil]]]

你应该得到一个只包含@“Boat”的数组