从字典数组中删除键值的重复项

时间:2014-07-18 08:21:36

标签: ios iphone objective-c ios7

我正在做一个Facebook API请求,要求我回复特定Facebook群组中所有相册的名称。我找回了一系列带有3个键/值的词典,其中一个是关键词' name'它映射到专辑名称,以及键“id”和#39;和' created_time'。

唯一的问题是,由于某种原因,我得到了重复的名称'专辑的价值......但只有一对。当我进入Facebook页面时,无论如何只有该专辑的一个实例,没有重复。

此外,他们的身份还有#39;值是不同的,但它只是具有实际指向有效数据的Facebook ID的重复组中的第一个字典,其他Facebook id值在您执行Facebook图形时不会返回任何内容用它们搜索,所以它是我想要的第一个副本。

如何从我的数组中删除这些无用的重复词典并保留一个有效的Facebook ID?谢谢! :)

1 个答案:

答案 0 :(得分:6)

首先,我想说找到一种方法来获得一个“清洁”的方法可能更有利。从faceBook列出,而不是事后掩盖问题。这可能现在不可能,但至少要找出这种行为的原因或提交错误报告。

除此之外,这应该可以解决问题:

-(NSMutableArray *) groupsWithDuplicatesRemoved:(NSArray *)  groups {
    NSMutableArray * groupsFiltered = [[NSMutableArray alloc] init];    //This will be the array of groups you need
    NSMutableArray * groupNamesEncountered = [[NSMutableArray alloc] init]; //This is an array of group names seen so far

    NSString * name;        //Preallocation of group name
    for (NSDictionary * group in groups) {  //Iterate through all groups
        name =[group objectForKey:@"name"]; //Get the group name
        if ([groupNamesEncountered indexOfObject: name]==NSNotFound) {  //Check if this group name hasn't been encountered before
            [groupNamesEncountered addObject:name]; //Now you've encountered it, so add it to the list of encountered names
            [groupsFiltered addObject:group];   //And add the group to the list, as this is the first time it's encountered
        }
    }
    return groupsFiltered;
}