Der Titel kann verwirrend sein, entschuldigt. Vielleicht kann mir jemand einen passenderen Titel empfehlen.Wörterbuch mit Wörterbüchern von Arrays erstellen (sortiert nach einer bestimmten benutzerdefinierten Objekteigenschaft)?
Ich habe eine .json
Datei wie folgt strukturiert.
"sections": [{
"title": "Locations",
"key": "location"
}],
"contacts": [{
"title": "Social Worker",
"name": "Mrs X",
"office": "xxxxxxxx",
"location": "Lisburn",
"department": "xxxxxxxx",
"telephone": "xxx xxxxxxxx"
},...
Wenn diese Parsen, erstelle ich ein array
contactsArray
genannt. Ich kann dann AEContact
Objekte aus dieser array
wie so erstellen:
for (NSDictionary *contactDic in [contactsArray valueForKey:@"contacts"]) {
// Create AEContact objects
_contact = [[AEContact alloc] initWithDictionary:contactDic];
[contacts addObject:_contact];
}
self.contacts = [contacts copy];
Im self.contacts
array
, die value
für die contact.location
Eigenschaft ist, was ich bin interessiert Ich separaten arrays
verwandter AEContact
Objekte basierend auf der erstellen müssen. location
Eigenschaft, Karte dann diese an die location
key
in meinem contactArray
dictionary
das ist, was ich bisher versucht habe:
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"]];
}
}
Und der Ausgang ist:
{
Ballynahinch = "<AEContact: 0x15dda1fc0>";
Bangor = "<AEContact: 0x15dda2210>";
Lisburn = "<AEContact: 0x15dda1c70>";
...
}
Wenn ein AEContact
Objekt denselben location
hat, sie es als einen weiteren Schlüssel/Wert im Wörterbuch setzt und überschreibt den vorherigen Eintrag. Was ich brauche, passiere so etwas wie diese:
{
Lisburn = "<AEContact: 0x15dda18f0>",
"<AEContact: 0x15dda18f0>",
"<AEContact: 0x15dda18f0>";
Bangor = "<AEContact: 0x15dda18f0>",
"<AEContact: 0x15dda18f0>",
"<AEContact: 0x15dda18f0>";
}
Ich bin nicht sicher, ob die Ausgabe sollte sollte/wie die Vorschau oben schaut, kann ich nur annehmen, als ich noch nicht mein Ziel erreicht haben. Wie kann ich die zugehörigen AEContact
Objekte in einem array
erstellen und diese auf location
Schlüssel in meinem locationsDic
? Vielen Dank.
Sie können nicht mehrere Werte für einen Schlüssel haben. Ein Schlüssel und ein Wert für ein Wörterbuch. Sie können ein Array mit Werten als Wert für den Schlüssel angeben. –
Ok das macht Sinn. Irgendwelche Ideen, wie ich ein Array von Werten für den Schlüssel erstellen kann? Ich erwarte nicht, dass Sie eine Menge Code für mich schreiben, aber selbst wenn Sie mich durch einige Links in die richtige Richtung lenken könnten? Idealerweise möglichst eng mit meinem Thema verbunden. Danke, dass du dir die Zeit zum Lesen genommen hast. – rosshump
Ich bin verwirrt von ur for loop. Ich denke, dass Sie die Objekte zu einem Array hier für for loop hinzufügen sollten. Und nachdem die for-Schleife beendet ist, können Sie dieses Array zu dem Wörterbuch hinzufügen. –