ios - 追加时从 NSArray 中删除重复值

标签 ios objective-c nsmutablearray nsarray duplicates

我有 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/

相关文章:

ios - 如何在 swiftui 邮件应用程序中传递主题和正文文本?

iphone - 如何使用HJCache刷新图片?

ios - 在 NativeScript 中执行 XHR-Request 时出现 UICollectionViewFlowLayout 异常

Swift - 无法获取 NSMutableArray() 的元素

objective-c - 从 NSMutableArray 中删除对象

ios - 裁剪 View Controller 的一部分

objective-c - UIImageView isAnimating 是否在 4.0 SDK 中中断?

iphone - 安装两个具有相同包标识符的应用程序

ios - 以编程方式设置/激活 Segue

objective-c - NSTable 和 NSMutableArray 排序