objective-c - 使用具有多个值的键创建 NSDictionary

标签 objective-c ios nsmutablearray nsdictionary

我有一个可变数组,其中包含 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/

相关文章:

ios - MapView 中的 AnnotationView 具有从 mysql 数据库检索到的不同图像

ios - Cocoapods 0.39.0更新错误

ios - 在 UICollectionView 中加载和显示随机单元格

ios - GKSession-杀死并续订 session

iphone - NSMutableDictionary 的排序

objective-c - 在 iPhone 中将多种日期格式转换为单一格式

ios - 如何将类对象添加到 NSMutableArray?

ios - 如何在RubyMotion中使用NSDecimalNumber类方法?

ios - NSMutableArray removeAllObjects 越界异常

ios - 将可变数组推送到 TableView