繁体   English   中英

NSMutableArray中包含对象的组元素

[英]Group element in NSMutableArray which contains object

我有一个NSMutableArray,在这样的每个位置都包含一个类模型的对象。 类模型包含两种类型的信息,我们将其称为idname 因此,在我的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是NSMutableArray,其中包含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);

但这不起作用..也许是因为数组中的每个元素都是一个对象? .. 救命!

您有正确的基本概念,但不应尝试在cellForRowAt进行此操作。 相反,您需要创建一个具有所需结构中数据的新数组,并将该数组用作表视图的源。 您还需要创建一个新类来放入数组。 一个具有id和名称的NSMutableArray的名称(我不会显示,但我将其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.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM