我有 2 个数组,其中一个是 NSMutableArray
(比如 mutArrayA),另一个是 NSArray(arrayB)
。
我将 arrayB
附加到 mutArrayA
,同时我想删除重复项(如果有的话),即我不希望 mutArrayA 中有任何重复项。
我知道这样做的一种方法是遍历 arrayB 中的每个对象并使用 indexOfObject
检查其索引,如果在 mutArrayA 中找到它,则不要将该对象附加到 mutArrayA,否则附加它。然而,我试图寻找一些更快的方法来做到这一点,我在这个网站上遇到了以下解决方案,如下所示:
[mutArrayA setArray:[[NSSet setWithArray:arrayB] allObjects]];
当我执行此命令时,由于 setArray,我的 mutArrayA 被替换为 arrayB 中的对象。有没有更快的方法可以附加数组而不获取重复项。
最佳答案
[mutArrayA addObjectsFromArray:[[NSSet setWithArray:arrayB] allObjects]];
[mutArrayA setArray:[[NSSet setWithArray:mutArrayA] allObjects]];
所以最初你从 arrayB 中删除重复项,附加它,然后应用相同的原则从 mutArrayA
中删除重复项(如果在附加后有重复项)
更新
您需要为您的类覆盖 isEqual:
方法。我将通过假设您的对象包含 NSString
对象来举个例子。
- (BOOL)isEqual:(MyClass *)object
{
return [self.key isEqualToString:object.key] && [self.value isEqualToString:object.value];
}
您还需要像这样覆盖 hash
方法:
- (NSUInteger)hash {
return [self.key hash] ^ [self.value hash];
}
问题是 NSSet
不会删除重复项,因为它认为它们不是重复项,因此通过覆盖此方法,您可以为它提供如何比较对象是否相等的线索
关于ios - 追加时从 NSArray 中删除重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21421718/