NSMutableArray中包含对象的组元素

时间:2017-10-12 20:04:16

标签: ios objective-c tableview union

我有一个NSMutableArray,它包含每个位置的类模型对象。 课程模型包含两种类型的信息,我们称之为 id 名称。 因此,在我的NSMutableArray的每个位置,我都有一个包含2个信息的对象。

然后,在我的NSMutableArray的第一个位置,我有

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

在NSMutableArray的第二个位置,我有:

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

在第三位

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

依旧......

好的,我的目标是在SNMutableArray中的各个对象之间建立相同的ID,但这太难了!

例如,如果我有:

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

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

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

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

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

目标是:

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

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

有什么想法吗?想在cellForRowAtIndexPath方法中使用它,我试着写这个:( cm是我的类模型,myArray是包含cm类对象的NSMutableArray)

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);

但这不起作用。可能因为我的数组中的每个元素都是一个对象? ..帮助!

1 个答案:

答案 0 :(得分:0)

您有正确的基本想法,但不应尝试在cellForRowAt中执行此操作。相反,您需要创建一个新数组,该数组包含所需结构中的数据,并使用该数组作为tableview的源。您还需要创建一个新类来放入数组;一个名称为idNSMutableArray的名称(我不会显示此内容,但我会将其称为GroupClassModel

使用类似:

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.