Objective-C从数组创建字典

时间:2015-05-19 13:48:39

标签: ios objective-c nsarray nsdictionary

我有一个名为tableView的NSArray,我试图将所有对象放入NSDictionary,但稍有不同。我的数组按字母顺序排列,如下所示:

enter image description here

我要做的是将它们放在我开始的NSDictionary中:

NSDictionary *contactDirectory = @{
                @"A" : @[],
                @"B" : @[],
                @"C" : @[],
                @"D" : @[],
                @"E" : @[],
                @"F" : @[],
                @"G" : @[],
                @"H" : @[],
                @"I" : @[],
                @"J" : @[],
                @"K" : @[],
                @"L" : @[],
                @"M" : @[],
                @"N" : @[],
                @"O" : @[],
                @"P" : @[],
                @"Q" : @[],
                @"R" : @[],
                @"S" : @[],
                @"T" : @[],
                @"U" : @[],
                @"V" : @[],
                @"W" : @[],
                @"X" : @[],
                @"Y" : @[],
                @"Z" : @[]
                };

所以如果一封信以A开头,请将其放在A栏中。 Vendor_Name和Vendor都需要在那里,但按Vendor_Name排序。我的问题是实现我想要的下一步是什么

1 个答案:

答案 0 :(得分:1)

  1. 创建一个空字典:

    NSMutableDictionary *contactDirectory = [NSMutableDictionary new];
    
  2. 迭代当前数组并将对象插入到代表的大写字母:

    for (NSInteger i = 0; i < tableData.count; i++) {
        NSDictionary *tmp = tableData[i];
        NSString *firstLetter = [[tmp objectForKey:@"Vendor_Name"] substringToIndex:1];
        if (![contactDirectory objectForKey:firstLetter]) {
            [contactDirectory setObject:[NSMutableArray new] forKey:firstLetter];
        }
        [[contactDirectory objectForKey:firstLetter] addObject:tmp];
    } 
    
  3. 使用排序描述符对每个子数组进行排序:

    NSMutableDictionary *contactDirectoryFinal = [NSMutableDictionary new];
    NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"Vendor_Name" ascending:YES];
    for (NSString *key in contactDirectory.allKeys) {
        [contactDirectoryFinal setObject:[[contactDirectory objectForKey:key] sortedArrayUsingDescriptors:[NSArray arrayWithObjects:descriptor,nil]] forKey:key];
    }
    
  4. contactDirectoryFinal包含您需要的内容。