创建唯一的NSMutableArray或NSMutableSet

时间:2009-07-21 18:29:56

标签: objective-c cocoa-touch

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

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

由于我正在比较NSStrings,我正在使用isEqualTo:方法检查字符串是否相等。

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

4 个答案:

答案 0 :(得分:42)

NSSet正是您要做的事情:它是一个(无序)唯一项目的集合。因此,您可以在数组中找到唯一的项目,如下所示:

NSSet *uniqueElements = [NSSet setWithArray:myArray];

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

NSSet最有可能使用哈希算法来插入O(1)(与O(n ^ 2)比较以检查每个项目是否通过迭代是唯一的),但Apple文档没有这样做保证所以你可能不应该依赖那个实现细节。

如果出于某种原因,您需要将已排序(有序)集合中的唯一项目保留,则可以将该集合转换为带有-[NSSet allObjects]的数组,然后对生成的数组进行排序。

答案 1 :(得分:4)

NSSetNSMutableSet可确保您没有重复的对象。它适用于NSStrings,如您的示例所示,但对于您自己的类,请记住“平等”的含义,并相应地实施hashisEqual:方法。

答案 2 :(得分:3)

集合永远不会包含重复元素,因此只需创建NSMutableSet即可保证值的唯一性。

答案 3 :(得分:1)

只有这行代码才能正常工作。

NSSet *mySet = [NSSet setWithArray:myArray];

现在mySet将具有独特的元素。