Название может быть путаным, извинения. Может быть, кто-то может посоветовать мне более подходящий титул.Создать словарь со словарями массивов (отсортировано по определенному свойству пользовательского объекта)?
У меня есть файл .json
, структурированный, как показано ниже.
"sections": [{
"title": "Locations",
"key": "location"
}],
"contacts": [{
"title": "Social Worker",
"name": "Mrs X",
"office": "xxxxxxxx",
"location": "Lisburn",
"department": "xxxxxxxx",
"telephone": "xxx xxxxxxxx"
},...
При анализе этого я создать array
называется contactsArray
. Затем я могу создать AEContact
объекты этого array
так:
for (NSDictionary *contactDic in [contactsArray valueForKey:@"contacts"]) {
// Create AEContact objects
_contact = [[AEContact alloc] initWithDictionary:contactDic];
[contacts addObject:_contact];
}
self.contacts = [contacts copy];
В self.contacts
array
, то value
для contact.location
собственности, что я заинтересован в мне нужно создать отдельный arrays
связанных AEContact
объектов на основе. location
свойство, то отобразить их в location
key
в моем contactArray
dictionary
Это то, что я пытался до сих пор:
NSMutableDictionary *locationsDic = [NSMutableDictionary new];
// Loop through contacts
for (int i = 0; i < self.contacts.count; i++) {
// Sort by location
if ([self.contacts[i] valueForKey:@"location"] == [[[contactsArray valueForKey:@"contacts"] objectAtIndex:i] valueForKey:@"location"]) {
[locationsDic setValue:self.contacts[i] forKey:[[[contactsArray valueForKey:@"contacts"] objectAtIndex:i] valueForKey:@"location"]];
}
}
И выход:
{
Ballynahinch = "<AEContact: 0x15dda1fc0>";
Bangor = "<AEContact: 0x15dda2210>";
Lisburn = "<AEContact: 0x15dda1c70>";
...
}
Когда AEContact
объект имеет тот же location
, он устанавливает его как еще один ключ/значение в словаре и перезаписывает предыдущую запись. Что мне нужно, чтобы это произошло что-то вроде этого:
{
Lisburn = "<AEContact: 0x15dda18f0>",
"<AEContact: 0x15dda18f0>",
"<AEContact: 0x15dda18f0>";
Bangor = "<AEContact: 0x15dda18f0>",
"<AEContact: 0x15dda18f0>",
"<AEContact: 0x15dda18f0>";
}
Я не уверен, если выход должен должен/будет выглядеть предварительный просмотр выше, я могу только предположить, как я еще не достиг своей цели. Как создать связанные объекты AEContact
в array
и сопоставить их с location
ключом в моем locationsDic
? Благодарю.
вы не можете иметь несколько значений для одного ключа. Один ключ и одно значение для словаря. У вас может быть массив значений в качестве значения для ключа. –
Хорошо, что имеет смысл. Любые идеи о том, как я могу создать массив значений для ключа? Я не ожидаю, что вы напишите мне кучу кода, но даже если вы можете указать мне в правильном направлении по некоторым ссылкам? В идеале, как можно ближе к моей проблеме. Спасибо, что нашли время для чтения. – rosshump
Я смущен ur для цикла. Я думаю, вы должны добавить объекты в массив здесь, для цикла. И после завершения цикла for вы можете добавить этот массив в словарь. –