1

我对 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"and @"Plane"。我感觉这不是这种方法的设计目的。

4

2 回答 2

5

您正在寻找-keysOfEntriesPassingTest:...

NSArray * selectedKeys = [dict keysOfEntriesPassingTest:^(id key, id obj, BOOL *stop)
                          {
                              return [obj containsObject:[NSNumber numberWithInt:2]];
                          }];
于 2012-08-09T18:26:56.117 回答
-2

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

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

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

于 2012-08-09T18:24:10.623 回答