我正在研究JSON NSMutableArray
,这些字段存储在对象中,然后存储在NSMutableArray
中。现在,凭借数据库的设计方式,最重要的字段(我称之为类别)重复。我试图合并重复项,例如
一个叫做play的对象有(playname,playdate,playCharacters)。 PlayCharacters也是一个NSmutableArray,因此playName可以有一个或多个playcharacters
所有播放对象都存储在最终NSMutableArray
中;播放列表。
我的代码消除了重复,但我不只是想删除重复项,我想合并它们
例如 [网球 - (约会:周四比赛),(比赛角色:摩西,约翰,肯)
[网球 - (日期:星期五),(playCharacters:leo,bill)]
我想要的是
[网球 - (日期:周四比赛,周五比赛),(比赛角色:利奥,比尔,摩西,约翰,肯)]
到目前为止,我的代码只删除了重复的内容
NSMutableSet *present = [NSMutableSet set];
NSUInteger y = 0;
while (y < [playList count]) {
id obj = [playList objectAtIndex:y];
if ([present containsObject:obj]) {
[playList removeObjectAtIndex:y];
} else {
[present addObject:obj];
y++;
}
}
答案 0 :(得分:0)
您可以创建一个包含诸如(nssstring playname,nsdate playdate,nsmutablearray playCharacters)之类信息的自定义对象。根据您的要求,您可以将此对象添加到nsarray中。然后创建一个将根据名称合并所有对象的函数。在这个函数中,它将循环遍历所有对象,然后将它合并为一个新数组。
-(void)someFunction{
NSMutableArray *newArray=[NSMutableArray array];
for (MyObj *obj in playList) {
NSMutableArray *present=[playList copy];//perform deep copy rather than shallow
if ([playList containsObject:obj]) {
//filter the array by gameName and get the new array containg similar names using nspredicates
[present filterUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
MyObj *customObject=(MyObj *) evaluatedObject;
return (customObject.gameName!=obj.gameName);
}]];
//write code to merge the players * dates
//LOOP throug the present and merge it to singe object
//then remove objs from playList array
[playList removeObjectsInArray:present];
}
}
}
尝试此代码我还没有测试但它可能有效