我有一个以 JSON 格式返回给我的字典字典
{
"neverstart": {
"color": 0,
"count": 0,
"uid": 32387,
"id": 73129,
"name": "neverstart"
},
"dev": {
"color": 0,
"count": 1,
"uid": 32387,
"id": 72778,
"name": "dev"
},
"iphone": {
"color": 0,
"count": 1,
"uid": 32387,
"id": 72777,
"name": "iphone"
}
}
我还有一个 NSArray,其中包含项目所需的 ID。例如[72777, 73129]
我需要做的是为数组中的项目获取 id => name 的字典。我知道这可以通过遍历数组,然后遍历字典中的所有值并检查值来实现,但似乎应该有一种不那么冗长的方法来执行此操作。
请原谅我的无知,因为我只是想了解 iPhone SDK 并学习 Objective C 和 Cocoa。
最佳答案
首先,由于您使用的是 JSON,我希望您已经找到了 BSJSONAdditions和/或 json-framework ,它们都是为您将 JSON 解析为原生 Cocoa 结构的开源项目。 This blog post给出了如何使用后者从 JSON 字符串获取 NSDictionary 的想法。
然后问题就变成了在字典中查找匹配值的问题之一。我不知道有一种方法可以满足您的需求——Cocoa 框架非常强大,但设计得非常通用和灵活。但是,将不多的行放在一起应该不会太难...(由于您是在 iPhone 上编程,我将使用快速枚举来使代码更清晰。)
NSDictionary* jsonDictionary = ...
NSDictionary* innerDictionary;
NSArray* requiredIDs = ...
NSMutableDictionary* matches = [NSMutableDictionary dictionary];
for (id key in jsonDictionary) {
innerDictionary = [jsonDictionary objectForKey:key];
if ([requiredIDs containsObject:[innerDictionary objectForKey:@"id"]])
[matches setObject:[innerDictionary objectForKey:@"name"]
forKey:[innerDictionary objectForKey:@"id"]];
}
此代码可能有拼写错误,但概念应该是正确的。另请注意,调用 [NSMutableDictionary dictionary]
将返回一个自动释放的对象。
关于objective-c - 字典值字典中的 iPhone NSArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1048362/