我有NSMutableArray,它保存已排序的(时间)对象。 每个对象都有唯一的URL字符串ID。
从性能的角度来看,什么是更好的方法?
我认为使用NSDictionary进行检查的成本较低, 但我更愿意理解为什么。
在这种情况下是否有更好的方法? 预先感谢。
答案 0 :(得分:0)
我可以建议使用 NSOrderedSet (如果需要订购)或 NSSet (否则):>
NSOrderedSet *orderedSet = [NSOrderedSet orderedSetWithArray:yourArray];
NSArray *arrayWithoutDuplicates = [orderedSet array];
或者,您可以使用KeyValueCording中的运算符:
uniquearray = [yourarray valueForKeyPath:@"@distinctUnionOfObjects.self"];
如果您想按属性删除重复项,例如name
,则通过该运算符非常简单:
@distinctUnionOfObjects.name
NSSet为不同的静态集声明编程接口 对象。您在创建静态集时会为其建立条目,然后 此后,条目将无法修改。 NSMutableSet,另一方面 手,为不同的动态集声明一个编程接口 对象。动态(或可变)集允许添加和删除 随时输入,可以根据需要自动分配内存。
因此,您可以在Apple Docs
中阅读有关可可收藏的信息。如果您要将唯一对象插入Array,则费用为 O(1)-O(N),但是如果您想将唯一对象插入到Set,则费用为 0(1) ,立即生效。 了解复杂性here
在这种情况下,设置速度要比Array快。
答案 1 :(得分:0)
您是否考虑过使用NSMutableSet保留唯一的URL字符串ID?
由于您已经将对象存储在已排序的数组中,因此无需再次将它们存储在字典中。只需将字符串放在一组即可。用“包含”检查集非常快。集合中“包含”的速度应该接近恒定,而不管它包含多少个项目。
您还可以考虑切换到NSMutableOrderedSet而不是全部切换到Array。 它将使项目保持唯一性和排序性。
上了解有关Collection类性能的更多信息