3

I have an NSDictinary look like this:

NSArray *duplicates = @[@{@"name": @"a", @"id": @"123"}, @{@"name": @"c", @"id": @"234"}, @{@"name": @"a", @"id": @"431"}, @{@"name": @"c", @"id": @"983"}, @{@"name": @"a", @"038"}];

How to remove the ditionaries which have the same name. For example, I want to remove the duplicate "a" and "c". I want the result to be like this:

NSArray *duplicates = @[@{@"name": @"a", @"id": @"123"}, @{@"name": @"c", @"id": @"234"}];
2
  • Did you search for duplicate questions? Why did you add the duplicates in the first place? Commented Jun 24, 2016 at 6:35
  • refers this link please stackoverflow.com/questions/1025674/… Commented Jun 24, 2016 at 6:40

2 Answers 2

8

Have you try this code

NSArray *duplicates = @[@{@"name": @"a"}, @{@"name": @"c"}, @{@"name": @"a"}, @{@"name": @"c"}, @{@"name": @"a"}];
NSSet *set = [NSSet setWithArray:duplicates];
NSArray *uniqueArray = [set allObjects];
Sign up to request clarification or add additional context in comments.

2 Comments

Sorry to mention, there is id in each dictionary, but the id is all unique. So your way won't work, I think. Please see updated questions.
@yongho i got it. you not mansion id in your previous array.
1

Just use following code for remove duplicates values.

your_array = [self groupsWithDuplicatesRemoved:(NSArray *)your_array myKeyParameter:@"your_key_name"];

You have to just call groupsWithDuplicatesRemoved this method with key name.

- (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;
}

Hope, this is what you're looking for. Any concern get back to me. :)

2 Comments

If you have multiple keys into a dictionary and that all data into a single array. Now you want to get unique array according to only one key. Then you must have to use this trick.
For example, you have an array like this.. NSArray *duplicates = @[@{@"name": @"a", @"name1": @"c"}, @{@"name": @"b", @"name1": @"d"}, @{@"name": @"c", @"name1": @"d"}, @{@"name": @"d"}, @{@"name1": @"d"}];... Now you want to get unique array based on "name1" key.. at that time, you must have to use this code like this way... unique_array = [self groupsWithDuplicatesRemoved:(NSArray *)duplicates myKeyParameter:@"name1"];

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.