gpt4 book ai didi

ios - 用数组的字典创建字典(按特定的自定义对象属性排序)?

转载 作者:行者123 更新时间:2023-12-01 20:15:33 25 4
gpt4 key购买 nike

标题可能会造成混淆,抱歉。也许有人可以给我建议一个更合适的标题。

我有一个.json文件,结构如下。

"sections": [{
"title": "Locations",
"key": "location"
}],
"contacts": [{
"title": "Social Worker",
"name": "Mrs X",
"office": "xxxxxxxx",
"location": "Lisburn",
"department": "xxxxxxxx",
"telephone": "xxx xxxxxxxx"
},...

解析时,我创建了一个称为 arraycontactsArray。然后,可以像下面这样从 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键?谢谢。

最佳答案

标题(以及问题描述)有点难以理解,但是我认为您正在尝试通过位置参数索引(AEContact)对象的数组。

我们可以通过更严格的命名以及在处理输入时使用查找或创建模式来澄清这一点。

NSDictionary *jsonResult = // the dictionary you begin with
NSArray *contactParams = jsonResult[@"contacts"];
NSMutableDictionary *contactsByLocation = [@{} mutableCopy];

for (NSDictionary *contactParam in contactParams) {
NSString *location = contactParam[@"location"];

// here's the important part: find the array of aecontacts in our indexed result, or
// create it if we don't find it
NSMutableArray *aeContacts = contactsByLocation[location];
if (!aeContacts) {
aeContacts = [@[] mutableCopy];
contactsByLocation[location] = aeContacts;
}
AEContact *aeContact = [[AEContact alloc] initWithDictionary:contactParam];
[aeContacts addObject:aeContact];
}
contactsByLocation将是我认为您正在寻找的。

关于ios - 用数组的字典创建字典(按特定的自定义对象属性排序)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36778392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com