如何从数组中删除重复的值

7

我有一个NSMutableArray,其中包含重复的值,例如[1,2,3,1,1,6]。 我想删除重复的值,并希望得到新的只包含不同值的数组。


这个 Stack Overflow 的问题可能会对你有所帮助:https://dev59.com/g3NA5IYBdhLWcg3wSrqa - visakh7
请查看这个链接。我已经得到了答案。http://stackoverflow.com/questions/5281295/iphone-sdk-how-to-delete-duplicates-in-the-nsarray/5281491#5281491 - Splendid
6个回答

18

两行简介

NSMutableArray *uniqueArray = [NSMutableArray array];

[uniqueArray addObjectsFromArray:[[NSSet setWithArray:duplicateArray] allObjects]];

如果您想要保留原有的顺序,请使用 NSOrderedSet - Cœur

3

我的解决方案:

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);

输出结果为:1,2,3,5,6......希望对您有所帮助。 :)

你好,你能告诉我如何统计数组1中重复元素的数量吗?比如说数字2出现了三次。 - Gajendra Rawat

2

我在NSArray上创建了一个包含该方法的类别:

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

然而,这是一种暴力的方法,效率并不高,可能有更好的方法。


0

如果您不担心对象的顺序,NSSet方法是最好的选择。

 uniquearray = [[NSSet setWithArray:yourarray] allObjects];

0
如果您担心顺序问题,请查看此解决方案。
// iOS 5.0 and later
NSArray * newArray = [[NSOrderedSet orderedSetWithArray:oldArray] array];

0
如果值的顺序不重要,最简单的方法是从数组创建一个集合:
NSSet *set = [NSSet setWithArray:myArray];

它将只包含唯一对象:

如果数组中出现相同的对象超过一次,则仅将其添加一次到返回的集合中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接