7

I have one NSMutableArray which containing duplicates value e.g.[1,2,3,1,1,6]. I want to remove duplicates value and want new array with distinct values.

Cœur
  • 37,241
  • 25
  • 195
  • 267
neel
  • 209
  • 3
  • 4
  • 9
  • possible duplicate of [The best way to remove duplicate values from NSMutableArray in Objective-C?](http://stackoverflow.com/questions/1025674/the-best-way-to-remove-duplicate-values-from-nsmutablearray-in-objective-c) – Cody Gray - on strike Apr 14 '11 at 10:26
  • see this too. i was answered. http://stackoverflow.com/questions/5281295/iphone-sdk-how-to-delete-duplicates-in-the-nsarray/5281491#5281491 – Splendid Apr 14 '11 at 11:39
  • This SO question may help you http://stackoverflow.com/questions/1025674/the-best-way-to-remove-duplicate-values-from-nsmutablearray-in-objective-c – visakh7 Apr 14 '11 at 10:25
  • Does this answer your question? [The best way to remove duplicate values from NSMutableArray in Objective-C?](https://stackoverflow.com/questions/1025674/the-best-way-to-remove-duplicate-values-from-nsmutablearray-in-objective-c) – Cœur Feb 06 '20 at 07:39

6 Answers6

18

two liner

NSMutableArray *uniqueArray = [NSMutableArray array];

[uniqueArray addObjectsFromArray:[[NSSet setWithArray:duplicateArray] allObjects]];
Exception
  • 249
  • 1
  • 4
  • 17
REALFREE
  • 4,378
  • 7
  • 40
  • 73
3

My solution:

array1=[NSMutableArray arrayWithObjects:@"1",@"2",@"2",@"3",@"3",@"3",@"2",@"5",@"6",@"6",nil];
array2=[[NSMutableArray alloc]init];
for (id obj in array1) 
{
    if (![array2 containsObject:obj]) 
    {
        [array2 addObject: obj];
    }
}
NSLog(@"new array is %@",array2);

The output is: 1,2,3,5,6..... Hope it's help you. :)

eeerahul
  • 1,629
  • 4
  • 27
  • 38
GauravBoss
  • 140
  • 2
  • 4
  • 13
2

I've made a category on NSArray with this method in :

- (NSArray *)arrayWithUniqueObjects {
    NSMutableArray *newArray = [NSMutableArray arrayWithCapacity:[self count]];

    for (id item in self)
        if (NO == [newArray containsObject:item])
            [newArray addObject:item];

    return [NSArray arrayWithArray:newArray];
}

However, this is brute force and not very efficient, there's probably a better approach.

deanWombourne
  • 38,189
  • 13
  • 98
  • 110
0

If you are worried about the order, check this solution

// iOS 5.0 and later
NSArray * newArray = [[NSOrderedSet orderedSetWithArray:oldArray] array];
Pang
  • 9,564
  • 146
  • 81
  • 122
keen
  • 3,001
  • 4
  • 34
  • 59
0

NSSet approach is the best if you're not worried about the order of the objects

 uniquearray = [[NSSet setWithArray:yourarray] allObjects];
Yogesh Kumar
  • 289
  • 4
  • 4
0

If the order of the values is not important, the easiest way is to create a set from the array:

NSSet *set = [NSSet setWithArray:myArray];

It will only contain unique objects:

If the same object appears more than once in array, it is added only once to the returned set.

Ole Begemann
  • 135,006
  • 31
  • 278
  • 256