ios – 通过对具有匹配的身份号码的对象进行分组来重建NSArray?

前端之家收集整理的这篇文章主要介绍了ios – 通过对具有匹配的身份号码的对象进行分组来重建NSArray?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个NSArray,数组中的每个对象都有一个groupId和一个名字.每个对象是唯一的,但是有很多与同一个groupId.有没有办法我可以拆分阵列并重新构建它,以便将名称分组为具有相应groubId的单个对象?这是数组当前的样子:
2013-03-12 20:50:05.572 appName[4102:702] the  array:  (
        {
        groupId = 1;
        name = "Dan";
    },{
        groupId = 1;
        name = "Matt";
    },{
        groupId = 2;
        name = "Steve";
    },{
        groupId = 2;
        name = "Mike";
    },{
        groupId = 3;
        name = "John";

    },{
        groupId = 4;
        name = "Kevin";
    }
)

这就是我想要的样子:

2013-03-12 20:50:05.572 appName[4102:702] the  array:  (
        {
        groupId = 1;
        name1 = "Dan";
        name2 = "Matt";
    },{
        groupId = 2;
        name1 = "Steve";
        name2 = "Mike";
    },{
        groupId = 4;
        name = "Kevin";
    }
)

编辑:
我试过&失败了许多尝试,大多数沿着这样的事情(马虎的娱乐,但给出一个想法):

int idNum = 0;
for (NSDictionary *arrObj in tempArr){
    NSString *check1 = [NSString stringWithFormat:@"%@",[arrObj valueForKey:@"groupId"]];
    NSString *check2 = [NSString stringWithFormat:@"%@",[[newDict valueForKey:@"groupId"]];
    if (check1 == check2){
        NSString *nameStr = [NSString stringWithFormat:@"name_%d",idNum];
        [newDict setValue:[arrObj valueForKey:@"name"] forKey:nameStr];
    }
    else {
        [newDict setValue:arrObj forKey:@"object"];
    }
    idNum++;
}

解决方法

NSArray *array = @[@{@"groupId" : @"1",@"name" : @"matt"},@{@"groupId" : @"2",@"name" : @"john"},@{@"groupId" : @"3",@"name" : @"steve"},@{@"groupId" : @"4",@"name" : @"alice"},@{@"groupId" : @"1",@"name" : @"bill"},@"name" : @"bob"},@"name" : @"jack"},@"name" : @"dan"},@"name" : @"kevin"},@"name" : @"mike"},@"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);

输出

(
        {
        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;
    }
 )

猜你在找的iOS相关文章