在Objective-C中从NSMutableArray中删除重复值的最佳方法是什么?

151

如何在Objective-C中从NSMutableArray中删除重复的值(NSString)?

这是最简单且正确的方式吗?

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

5
请问您是想澄清是否要消除对完全相同的对象的引用,还是包括那些虽然是不同的对象,但每个字段的值都相同的情况? - Amagrammer
有没有一种方法可以在不创建任何数组副本的情况下完成这个操作? - hfossli
这种方法非常简单,也可能是最好的。但是例如对于我的情况它行不通 - 数组的项不是完全相同的,而应该按一个属性进行比较。 - Vyachaslav Gerchicov
尝试一下这个... https://dev59.com/Dpjga4cB1Zd3GeqPIlQ4#38007095 - Meet Doshi
14个回答

1

有一个KVC对象操作符提供了更优雅的解决方案 uniquearray = [yourarray valueForKeyPath:@"@distinctUnionOfObjects.self"]; 这里是一个NSArray category


0
这里是从NSMutable Array中删除重复值的代码。它能为您解决问题。myArray是您要删除重复值的可变数组。
for(int j = 0; j < [myMutableArray count]; j++){
    for( k = j+1;k < [myMutableArray count];k++){
    NSString *str1 = [myMutableArray objectAtIndex:j];
    NSString *str2 = [myMutableArray objectAtIndex:k];
    if([str1 isEqualToString:str2])
        [myMutableArray removeObjectAtIndex:k];
    }
 } // Now print your array and will see there is no repeated value

0

使用Orderedset就可以解决问题。这将保持数组中的去重并维护顺序,而通常情况下集合不会这样做。


-2

只需使用这个简单的代码:

NSArray *hasDuplicates = /* (...) */;
NSArray *noDuplicates = [[NSSet setWithArray: hasDuplicates] allObjects];

由于NSSet不允许重复值,而所有对象都返回一个数组


对我有用。你所要做的就是再次对NSArray进行排序,因为NSSet返回的是未排序的NSArray。 - lindinax
或者直接使用NSOrderedSet代替NSSet - lindinax

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