【发布时间】:2016-08-15 04:10:07
【问题描述】:
标题可能令人困惑,抱歉。也许有人可以建议我更合适的标题。
我有一个.json 文件,其结构如下。
"sections": [{
"title": "Locations",
"key": "location"
}],
"contacts": [{
"title": "Social Worker",
"name": "Mrs X",
"office": "xxxxxxxx",
"location": "Lisburn",
"department": "xxxxxxxx",
"telephone": "xxx xxxxxxxx"
},...
解析时,我创建了一个名为contactsArray 的array。然后我可以从这个array 创建AEContact 对象,如下所示:
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 中,contact.location 属性的value 是我感兴趣的。我需要根据location 属性创建相关AEContact 对象的单独arrays ,然后将这些映射到我的contactArray dictionary 中的location key
这是我迄今为止尝试过的:
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>";
}
我不确定输出是否应该/看起来像上面的预览,我只能假设我还没有实现我的目标。如何在array 中创建相关的AEContact 对象并将它们映射到我的locationsDic 中的location 键?谢谢。
【问题讨论】:
-
一个键不能有多个值。字典的一个键和一个值。您可以将一组值作为键的值。
-
好吧,这是有道理的。关于如何为键创建一组值的任何想法?我不希望您为我编写一堆代码,但即使您可以通过某些链接为我指明正确的方向?如果可能的话,最好与我的问题密切相关。感谢您抽出宝贵时间阅读。
-
我对你的 for 循环感到困惑。我认为您应该在 for 循环中将对象添加到数组中。并且在 for 循环结束后,您可以将此数组添加到字典中。
-
再说一次,这是有道理的。谢谢,它为我指明了正确的方向。虽然现在我只需要弄清楚如何根据 location 属性对对象进行排序。进行更改后,字典将每个 AECOntact 对象添加到每个位置。我应该使用某种谓词,还是在找到重复的位置值时停止另一个循环,或者创建单独的数组?感谢您的帮助。
标签: ios objective-c json nsarray nsmutabledictionary