iPhone NSArray из Словаря словарных значений
-
20-08-2019 - |
Вопрос
У меня есть словарь словарей, который мне возвращают в формате 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, содержащий идентификатор, необходимый для элемента.например[72777, 73129]
Что мне нужно сделать, так это получить словарь id => name для элементов массива.Я знаю, что это возможно путем перебора массива, а затем перебора всех значений в словаре и проверки значений, но похоже, что для этого должен быть менее трудоемкий метод.
Извините за мое невежество, я просто пытаюсь разобраться в iPhone SDK и изучаю Objective C и Cocoa.
Решение
Прежде всего, поскольку вы используете JSON, я надеюсь, вы уже нашли BSJSONДополнения и/или JSON-фреймворк, оба проекта с открытым исходным кодом для анализа JSON в собственные структуры Cocoa. Этот пост в блоге дает представление о том, как использовать последний для получения NSDictionary из строки JSON.
Тогда проблема становится в поиске совпадающих значений в словаре.Мне неизвестен ни один метод, который бы делал то, что вы ищете — фреймворки 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]
вернет автоматически выпущенный объект.
Другие советы
Вы пробовали этот метод NSDictionary:
+ (id)dictionaryWithObjects:(NSArray *)objects forKeys:(NSArray *)keys
У Дрю есть ответ...Я обнаружил, что Руководство GCC для NSDictionary был полезен на днях, когда у меня возник аналогичный вопрос.
http://www.gnustep.org/resources/documentation/Developer/Base/Reference/NSDictionary.html