首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使NSMutableArray或NSMutableSet具有唯一性

问使NSMutableArray或NSMutableSet具有唯一性
EN

Stack Overflow用户
提问于 2009-07-21 18:29:56
回答 4查看 17.7K关注 0票数 16

我目前正在枚举NSMutableArray (或NSMutableSet)元素,以查找重复项并将其删除。

例如,如果数组/集合的值为[@"a", @"b", @"b", @"c"],则最终结果应为[@"a", @"b", @"c"]。

因为我比较的是NSStrings,所以我使用isEqualTo:方法来检查字符串是否相等。

有没有一种更有效的方法来删除重复条目,而不是遍历所有条目并检查是否存在重复条目?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-07-21 18:35:27

NSSet做的正是您想要做的事情:它是唯一项的(无序)集合。因此,您可以像这样查找数组中的唯一项:

代码语言:javascript
复制
NSSet *uniqueElements = [NSSet setWithArray:myArray];

// iterate over the unique items
for(id element in uniqueElements) {
  // do something
}

NSSet很可能使用散列算法来插入O(1) (与O(n^2)相比,O(n^2)用于检查每一项是否在迭代中是唯一的),但是苹果文档没有这样的保证,所以您可能不应该依赖于实现细节。

如果出于某种原因,您需要将唯一项保存在已排序(已排序)的集合中,则可以使用-[NSSet allObjects]将集合转换回数组,然后对结果数组进行排序。

票数 42
EN

Stack Overflow用户

发布于 2009-07-21 20:04:58

NSSet或NSMutableSet将保证您不会有重复的对象。它将像您的示例一样适用于NSStrings,但是对于您自己的类,请记住您所说的"equal“是什么意思,并相应地实现hash和isEqual:方法。

票数 5
EN

Stack Overflow用户

发布于 2009-07-21 18:34:37

set永远不会包含重复的元素,因此只需创建一个NSMutableSet就可以保证值的唯一性。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1160898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档