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

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

这就是我想要的样子:

  1. 2013-03-12 20:50:05.572 appName[4102:702] the array: (
  2. {
  3. groupId = 1;
  4. name1 = "Dan";
  5. name2 = "Matt";
  6. },{
  7. groupId = 2;
  8. name1 = "Steve";
  9. name2 = "Mike";
  10. },{
  11. groupId = 4;
  12. name = "Kevin";
  13. }
  14. )

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

  1. int idNum = 0;
  2. for (NSDictionary *arrObj in tempArr){
  3. NSString *check1 = [NSString stringWithFormat:@"%@",[arrObj valueForKey:@"groupId"]];
  4. NSString *check2 = [NSString stringWithFormat:@"%@",[[newDict valueForKey:@"groupId"]];
  5. if (check1 == check2){
  6. NSString *nameStr = [NSString stringWithFormat:@"name_%d",idNum];
  7. [newDict setValue:[arrObj valueForKey:@"name"] forKey:nameStr];
  8. }
  9. else {
  10. [newDict setValue:arrObj forKey:@"object"];
  11. }
  12. idNum++;
  13. }

解决方法

  1. 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"},];
  2.  
  3. NSMutableArray *resultArray = [NSMutableArray new];
  4. NSArray *groups = [array valueForKeyPath:@"@distinctUnionOfObjects.groupId"];
  5. for (NSString *groupId in groups)
  6. {
  7. NSMutableDictionary *entry = [NSMutableDictionary new];
  8. [entry setObject:groupId forKey:@"groupId"];
  9.  
  10. NSArray *groupNames = [array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"groupId = %@",groupId]];
  11. for (int i = 0; i < groupNames.count; i++)
  12. {
  13. NSString *name = [[groupNames objectAtIndex:i] objectForKey:@"name"];
  14. [entry setObject:name forKey:[NSString stringWithFormat:@"name%d",i + 1]];
  15. }
  16. [resultArray addObject:entry];
  17. }
  18.  
  19. NSLog(@"%@",resultArray);

输出

  1. (
  2. {
  3. groupId = 3;
  4. name1 = steve;
  5. name2 = jack;
  6. name3 = daniel;
  7. },{
  8. groupId = 4;
  9. name1 = alice;
  10. name2 = dan;
  11. },{
  12. groupId = 1;
  13. name1 = matt;
  14. name2 = bill;
  15. name3 = kevin;
  16. },{
  17. groupId = 2;
  18. name1 = john;
  19. name2 = bob;
  20. name3 = mike;
  21. }
  22. )

猜你在找的iOS相关文章