2017-10-12 4 views
0

J'ai un NSMutableArray qui contient un objet d'un modèle de classe dans chaque position comme celle-ci. Le modèle de classe contient 2 types d'informations, que nous appellerons id et nom. Ainsi, dans chaque emplacement de mon NSMutableArray j'ai un objet qui contient 2 informations.Élément de groupe dans NSMutableArray contenant l'objet

Puis, dans la première position de mon NSMutableArray je

{ 
id = 1; 
name = "Dan"; //this is the first object in NSMutableArray 
} 

Dans la deuxième position de NSMutableArray, je:

{ 
id = 1; 
name = "Luca"; 
} 

Dans la troisième position

{ 
id = 2; 
name = "Tom"; 
} 

et ainsi de suite ..

Ok, mon but est de faire l'union des ID identiques entre les différents objets dans le SNMutableArray mais c'est trop difficile!

Par exemple, si j'ai:

{ 
id = 1; 
name = "Tom"; 
} 

{ 
id = 1; 
name = "Luca"; 
} 

{ 
id = 2; 
name = "Steve"; 
} 

{ 
id = 2; 
name = "Jhon"; 
} 

{ 
id = 3; 
name = "Andrew"; 
} 

L'objectif est:

{ 
id = 1; 
name = "Tom"; 
name = "Luca"; 
} 
{ 
id = 2; 
name = "Steve"; 
name = "Jhon"; 

} 
{ 
id = 3; 
name = "Andrew"; 
} 

Toutes les idées? voudrait utiliser dans la méthode cellForRowAtIndexPath et j'ai essayé d'écrire ceci: (cm est mon modèle de classe et monTableau est le NSMutableArray qui contient un objet de classe cm)

ClassModel *cm = [myArray objectAtIndex:indexPath.row]; 


NSMutableArray * resultArray = [NSMutableArray new]; 
NSArray * groups = [array valueForKeyPath:cm.ID]; 
for (NSString * groupId in groups) 
{ 
     NSMutableDictionary * entry = [NSMutableDictionary new]; 
     [insert 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: [NSS string stringWithFormat: @ "name% d", i + 1]]; 
     } 
     [resultArray addObject: entry]; 
} 

NSLog (@ "% @", resultArray); 

Mais cela ne work..maybe pas parce que chaque élément de mon tableau est un objet ?? .. Aidez-moi!

Répondre

0

Vous avez la bonne idée de base, mais vous ne devriez pas essayer de le faire dans cellForRowAt. Au contraire, vous devez créer un nouveau tableau contenant les données dans la structure requise et utiliser ce tableau comme source pour votre tableview. Vous devrez également créer une nouvelle classe à mettre dans le tableau; celui qui a un id et un NSMutableArray pour les noms (je ne vais pas montrer cela, mais je l'appellerai GroupClassModel)

Utilisez quelque chose comme:

NSMutableDictionary *groups = [NSMutableDictionary new] 
for (ClassModel *cm in array) { 
    GroupClassModel *gcm = groups[cm.id]; 
    if (gcm == nil) { 
     gcm = [GroupClassModel new]; 
     gcm.id = cm.id 
     groups[cm.id] = gcm 
    } 
    [gcm.names addObject:cm.name]; 
} 

NSArray *groupedName = [groups allValues]; 
// Finally, sort groupedName by id if that is required. 
+0

Merci pour la réponse! Je n'ai qu'une seule question: qu'est ce que 'GroupClassModel * gcm'? Je ne comprends pas –

+0

C'est une nouvelle classe d'objets que vous devrez créer et qui aura un tableau pour les noms plutôt qu'une seule chaîne. – Paulw11

+0

Ok, maintenant je comprends! Question finale, si je veux remplacer id avec une chaîne pour le syndicat, ça marche quand même? J'ai un avertissement 'Instance method '-add:' not found (le type de retour par défaut est 'id')' –