我是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"
。我感觉这不是这个方法的目的。
答案 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”的数组