我有一个可变数组,其中包含 NSDictionary
dic1 对象,
每个字典都有一个名为 contactId
的键,多个字典可以具有相同的 contactId
值。
我想做的是创建一个 NSDictionary
以唯一的 contactIds
作为键和一个包含所有 NSDictionary
列表的数组值> 值 contactId
等于键的 dic1 对象。
我该怎么做?
我的数据是这样的:
**myArray**:[ **dic1** {contactId = x1 , name = name1 }, **dic2**{contactId = x2, name =
name2 }, **dic3**{contactId = x1, name = name3} ]
我希望它变成这样:
**NSDictionary**: { **x1**:[dic1, dic3], **x2**:[dic2] }
最佳答案
使用快速枚举:
NSMutableDictionary *result = [NSMutableDictionary dictionary];
for (id obj in myArray)
{
NSString *contactId = [obj objectForKey:@"contactId"];
NSMutableSet *contacts = [result objectForKey:contactId];
if (!contacts)
{
contacts = [NSMutableSet set]
[result setObject:contacts forKey:contactId];
}
[contacts addObject:obj];
}
您可以使用 block 来获得真正的额外好处:
__block NSMutableDictionary *result = [NSMutableDictionary dictionary];
[myArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){
NSString *contactId = [obj objectForKey:@"contactId"];
NSMutableSet *contacts = [result objectForKey:contactId];
if (!contacts)
{
contacts = [NSMutableSet set]
[result setObject:contacts forKey:contactId];
}
[contacts addObject:obj];
}];
关于objective-c - 使用具有多个值的键创建 NSDictionary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11325804/