[英]Group element in NSMutableArray which contains object
我有一个NSMutableArray,在这样的每个位置都包含一个类模型的对象。 类模型包含两种类型的信息,我们将其称为id和name 。 因此,在我的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.