Ios 如何从NSArray中删除具有相同值的对象的副本

Ios 如何从NSArray中删除具有相同值的对象的副本,ios,objective-c,Ios,Objective C,我有一个n字典看起来像这样: NSArray *duplicates = @[@{@"name": @"a", @"id": @"123"}, @{@"name": @"c", @"id": @"234"}, @{@"name": @"a", @"id": @"431"}, @{@"name": @"c", @"id": @"983"}, @{@"name": @"a", @"038"}]; NSArray *duplicates = @[@{@"name": @"a", @"id": @"1

我有一个
n字典
看起来像这样:

NSArray *duplicates = @[@{@"name": @"a", @"id": @"123"}, @{@"name": @"c", @"id": @"234"}, @{@"name": @"a", @"id": @"431"}, @{@"name": @"c", @"id": @"983"}, @{@"name": @"a", @"038"}];
NSArray *duplicates = @[@{@"name": @"a", @"id": @"123"}, @{@"name": @"c", @"id": @"234"}];
如何删除具有相同名称的附加项。例如,我想删除重复的“a”和“c”。我希望结果是这样的:

NSArray *duplicates = @[@{@"name": @"a", @"id": @"123"}, @{@"name": @"c", @"id": @"234"}, @{@"name": @"a", @"id": @"431"}, @{@"name": @"c", @"id": @"983"}, @{@"name": @"a", @"038"}];
NSArray *duplicates = @[@{@"name": @"a", @"id": @"123"}, @{@"name": @"c", @"id": @"234"}];
你试过这个代码吗

NSArray *duplicates = @[@{@"name": @"a"}, @{@"name": @"c"}, @{@"name": @"a"}, @{@"name": @"c"}, @{@"name": @"a"}];
NSSet *set = [NSSet setWithArray:duplicates];
NSArray *uniqueArray = [set allObjects];

只需使用以下代码删除重复的值

your_array = [self groupsWithDuplicatesRemoved:(NSArray *)your_array myKeyParameter:@"your_key_name"];
您只需使用键名调用
groupsWithDuplicatesRemoved
此方法即可

- (NSMutableArray *) groupsWithDuplicatesRemoved:(NSArray *)  groups myKeyParameter:(NSString *)myKeyParameter {
    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 = [NSString stringWithFormat:@"%@", [group objectForKey:myKeyParameter]]; //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;
}

希望,这就是你要找的。如有任何问题,请与我联系。:)

您是否搜索了重复的问题?为什么要首先添加重复项?如果您在一个字典中有多个键,并且所有数据都在一个数组中,请参考此链接。现在您只需要根据一个键获得唯一数组。那么你必须使用这个技巧。例如,你有一个这样的数组<代码>NSArray*重复项=@[{“名称”:@“a”,“名称1”:@“c”},{“名称”:@“b”,“名称1”:@“d”},{“名称”:@“c”,“名称1”:@“d”},{“名称1”:@“d”},{“名称”:@“d”},{“名称1”:@“d”}。。。现在,您需要基于“name1”键获取唯一数组。。在那个时候,你必须像这样使用这个代码<代码>唯一_数组=[self groupsWithDuplicatesRemoved:(NSArray*)复制myKeyParameter:@“name1”]很抱歉,每个字典中都有id,但id都是唯一的。我想你的方法行不通。请看更新的问题。@yongho我知道了。您在上一个数组中没有指定id。