2016-06-24 2 views
2

Ich habe einen NSDictinary sieht wie folgt aus:Wie Duplikat Objekte zu entfernen, die denselben Wert von NSArray hat

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

Wie die ditionaries zu entfernen, die den gleichen Namen haben. Zum Beispiel möchte ich die Duplikate "a" und "c" entfernen. Ich möchte das Ergebnis so sein:

NSArray *duplicates = @[@{@"name": @"a", @"id": @"123"}, @{@"name": @"c", @"id": @"234"}]; 
+0

Haben Sie nach doppelten Fragen gesucht? Warum haben Sie die Duplikate an erster Stelle hinzugefügt? – Wain

+0

verweist auf diesen Link bitte http://StackOverflow.com/Questions/1025674/The-best-way-to-remove-duplicate-values-from-nsmutablearray-in-objective-c –

Antwort

0

Verwenden Sie einfach folgenden Code für remove Werte dupliziert.

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

Sie müssen nur groupsWithDuplicatesRemoved mit Schlüsselnamen diese Methode aufrufen.

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

Hoffe, das ist, was Sie suchen. Jede Sorge komme zu mir zurück. :)

+0

NSSet wird den Trick machen. –

+0

Wenn Sie mehrere Schlüssel in einem Wörterbuch haben und alle Daten in einem einzigen Array. Jetzt möchten Sie ein eindeutiges Array nach nur einem Schlüssel erhalten. Dann musst du diesen Trick anwenden. –

+0

Zum Beispiel haben Sie ein Array wie dieses. 'NSArray * duplicates = @ [@ {@" name ": @" a ", @" name1 ": @" c "}, @ {@" name ": @ "b", @ "Name1": @ "d"}, @ {@ "Name": @ "c", @ "Name1": @ "d"}, @ {@ "Name": @ "d"} , @ {@ "name1": @ "d"}]; '... Nun möchten Sie ein eindeutiges Array basierend auf dem" name1 "-Schlüssel erhalten. Zu diesem Zeitpunkt müssen Sie diesen Code auf diese Weise verwenden. . 'unique_array = [self groupsWithDuplicatesRemoved: (NSArray *) dupliziert myKeyParameter: @" name1 "];' –

7

Haben Sie diesen Code versuchen

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

Sorry zu erwähnen, es gibt ID in jedem Wörterbuch, aber die ID ist alles einzigartig. Dein Weg wird nicht funktionieren, denke ich. Bitte beachten Sie die aktualisierten Fragen. –

+0

@yongho Dies wird funktionieren – iphonic

+0

@yongho ich habe es. Sie haben keine Villa-ID in Ihrem vorherigen Array. –

Verwandte Themen