ios - Create dictionary with dictionaries of arrays (sorted by a specific custom object property)? -
the title may confusing, apologies. maybe can advise me on more appropriate title.
i have .json
file structured below.
"sections": [{ "title": "locations", "key": "location" }], "contacts": [{ "title": "social worker", "name": "mrs x", "office": "xxxxxxxx", "location": "lisburn", "department": "xxxxxxxx", "telephone": "xxx xxxxxxxx" },...
when parsing this, create array
called contactsarray
. can create aecontact
objects array
so:
(nsdictionary *contactdic in [contactsarray valueforkey:@"contacts"]) { // create aecontact objects _contact = [[aecontact alloc] initwithdictionary:contactdic]; [contacts addobject:_contact]; } self.contacts = [contacts copy];
in self.contacts
array
, value
contact.location
property interested in. need create separate arrays
of related aecontact
objects based on location
property, map these location
key
in contactarray
dictionary
this have tried far:
nsmutabledictionary *locationsdic = [nsmutabledictionary new]; // loop through contacts (int = 0; < self.contacts.count; i++) { // sort 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"]]; } }
and output is:
{ ballynahinch = "<aecontact: 0x15dda1fc0>"; bangor = "<aecontact: 0x15dda2210>"; lisburn = "<aecontact: 0x15dda1c70>"; ... }
when aecontact
object has same location
, sets key/value in dictionary , overwrites previous entry. need happen this:
{ lisburn = "<aecontact: 0x15dda18f0>", "<aecontact: 0x15dda18f0>", "<aecontact: 0x15dda18f0>"; bangor = "<aecontact: 0x15dda18f0>", "<aecontact: 0x15dda18f0>", "<aecontact: 0x15dda18f0>"; }
i'm not sure if output should should/will preview above, can assume have not yet achieved goal. how can create related aecontact
objects in array
, map them location
key in locationsdic
? thanks.
the title (and problem description) little tough follow, think you're trying index array of (aecontact) objects location parameter.
we can clarify tighter naming , find-or-create pattern process input.
nsdictionary *jsonresult = // dictionary begin nsarray *contactparams = jsonresult[@"contacts"]; nsmutabledictionary *contactsbylocation = [@{} mutablecopy]; (nsdictionary *contactparam in contactparams) { nsstring *location = contactparam[@"location"]; // here's important part: find array of aecontacts in our indexed result, or // create if don't find nsmutablearray *aecontacts = contactsbylocation[location]; if (!aecontacts) { aecontacts = [@[] mutablecopy]; contactsbylocation[location] = aecontacts; } aecontact *aecontact = [[aecontact alloc] initwithdictionary:contactparam]; [aecontacts addobject:aecontact]; }
contactsbylocation
think you're looking for.
Comments
Post a Comment