包含对象的NSMutableArray中的组元素
问题描述:
我有一个NSMutableArray,其中包含类似于此类的每个位置的类模型对象。 该模型包含两种类型的信息,我们将其称为id和名称。 因此,在我的NSMutableArray的每个位置,我都有一个包含2个信息的对象。包含对象的NSMutableArray中的组元素
然后,在我的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方法中使用此,我试图写:(厘米是我的类模型和myArray的是包含厘米类的一个对象的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);
但这并不work..maybe因为我阵列中的每个元素都是一个对象? .. 帮帮我!
答
你有正确的基本想法,但你不应该尝试在cellForRowAt
中这样做。相反,您需要创建一个新数组,其中包含所需结构中的数据,并将该数组用作tableview的源。你还需要创建一个新的类来放入数组;一个有一个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.
感谢您的回答!我只有一个问题:什么是'GroupClassModel * gcm'?我不明白 –
这是一个新的对象类,您将需要创建一个名称数组而不是单个字符串。 – Paulw11
好吧,现在我明白了!最后一个问题,如果我想用工会的字符串替换id,它是否工作呢?我有一个警告'实例方法'-add:'找不到(返回类型默认为'id')' –