Rebuild an NSArray by grouping objects that have matching id numbers?

前端 未结 5 1331
醉酒成梦
醉酒成梦 2020-11-29 06:38

I have an NSArray and each object in the array has a groupId and a name. Each object is unique but there are many with the same groupId. Is there a way i can tear the arra

5条回答
  •  孤独总比滥情好
    2020-11-29 07:33

    NSArray *array = @[@{@"groupId" : @"1", @"name" : @"matt"},
                       @{@"groupId" : @"2", @"name" : @"john"},
                       @{@"groupId" : @"3", @"name" : @"steve"},
                       @{@"groupId" : @"4", @"name" : @"alice"},
                       @{@"groupId" : @"1", @"name" : @"bill"},
                       @{@"groupId" : @"2", @"name" : @"bob"},
                       @{@"groupId" : @"3", @"name" : @"jack"},
                       @{@"groupId" : @"4", @"name" : @"dan"},
                       @{@"groupId" : @"1", @"name" : @"kevin"},
                       @{@"groupId" : @"2", @"name" : @"mike"},
                       @{@"groupId" : @"3", @"name" : @"daniel"},
                       ];
    
    NSMutableArray *resultArray = [NSMutableArray new];
    NSArray *groups = [array valueForKeyPath:@"@distinctUnionOfObjects.groupId"];
    for (NSString *groupId in groups)
    {
        NSMutableDictionary *entry = [NSMutableDictionary new];
        [entry setObject:groupId forKey:@"groupId"];
    
        NSArray *groupNames = [array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"groupId = %@", groupId]];
        for (int i = 0; i < groupNames.count; i++)
        {
            NSString *name = [[groupNames objectAtIndex:i] objectForKey:@"name"];
            [entry setObject:name forKey:[NSString stringWithFormat:@"name%d", i + 1]];
        }
        [resultArray addObject:entry];
    }
    
    NSLog(@"%@", resultArray);
    

    Output:

        (
            {
            groupId = 3;
            name1 = steve;
            name2 = jack;
            name3 = daniel;
        },
            {
            groupId = 4;
            name1 = alice;
            name2 = dan;
        },
            {
            groupId = 1;
            name1 = matt;
            name2 = bill;
            name3 = kevin;
        },
            {
            groupId = 2;
            name1 = john;
            name2 = bob;
            name3 = mike;
        }
     )
    

提交回复
热议问题