我目前正在枚举NSMutableArray (或NSMutableSet)元素,以查找重复项并将其删除。
例如,如果数组/集合的值为[@"a", @"b", @"b", @"c"],则最终结果应为[@"a", @"b", @"c"]。
因为我比较的是NSStrings,所以我使用isEqualTo:方法来检查字符串是否相等。
有没有一种更有效的方法来删除重复条目,而不是遍历所有条目并检查是否存在重复条目?
发布于 2009-07-21 18:35:27
NSSet做的正是您想要做的事情:它是唯一项的(无序)集合。因此,您可以像这样查找数组中的唯一项:
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]将集合转换回数组,然后对结果数组进行排序。
发布于 2009-07-21 20:04:58
NSSet或NSMutableSet将保证您不会有重复的对象。它将像您的示例一样适用于NSStrings,但是对于您自己的类,请记住您所说的"equal“是什么意思,并相应地实现hash和isEqual:方法。
发布于 2009-07-21 18:34:37
set永远不会包含重复的元素,因此只需创建一个NSMutableSet就可以保证值的唯一性。
https://stackoverflow.com/questions/1160898
复制相似问题