Rud*_*udi 16 cocoa-touch objective-c
我目前正在通过NSMutableArray(或NSMutableSet)元素枚举来查找重复项并删除它们.
例如,如果array/set具有值[@"a", @"b", @"b", @"c"],则最终结果应为[@"a", @"b", @"c"].
因为我正在比较NSStrings,我正在使用isEqualTo:方法来检查字符串是否相等.
是否有更有效的方法来删除重复的条目,而不是遍历所有条目并检查是否存在重复?
Bar*_*ark 42
一个NSSet不正是你想要做什么:它是唯一一个项目(无序)集合.因此,您可以在数组中找到唯一的项目,如下所示:
NSSet *uniqueElements = [NSSet setWithArray:myArray];
// iterate over the unique items
for(id element in uniqueElements) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
NSSet 最有可能使用哈希算法进行插入O(1)(与O(n ^ 2)比较以检查每个项目是否通过迭代是唯一的),但Apple文档没有做出这样的保证,所以你可能不应该计算关于该实施细节.
如果由于某种原因需要将唯一项保留在已排序(有序)的集合中,则可以将该集转回到数组中-[NSSet allObjects],然后对生成的数组进行排序.
一个NSSet或NSMutableSet将保证你没有重复的对象。它将NSStrings像您的示例那样工作,但是对于您自己的类,请记住“等于”是什么意思,并相应地实现hash和isEqual:方法。
| 归档时间: |
|
| 查看次数: |
17519 次 |
| 最近记录: |