合并对象并根据字段值删除重复项

时间:2013-09-17 06:07:07

标签: ios objective-c json nsmutablearray

我正在研究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++;
        }
    }

1 个答案:

答案 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];
    }
}

}

尝试此代码我还没有测试但它可能有效