关于数组去除重复的数据的方法推荐

在日常工作中,经常会遇见在数组中有重复的数据,可能是服务器返回中本来就有,或者异常操作造成的重复数据,所以往往需要去除重复数据或者做安全过滤手段防止重复数据产生。

对于简单的数据,比如数组中仅含有的成员是字符串,很多人一般就用for循环或者数组的containsObject来去除,但是经常数组里面会有很多复杂的结构类型,最常见的比如字典。

如果还是用上述的方法,当然可行,但是不仅麻烦,而且效率会很低下。

这里强列推荐下NSSet(集合)
NSSet和我们常用NSArry区别是:在搜索一个一个元素时NSSet比NSArray效率高,主要是它用到了一个算法hash,一个hash过程就能找到A存储的位置。而对于NSArray,若想知道A到底在不在数组中,则需要便利整个数组,显然效率较低了;

而在官方文档中也这样写道:
“You can use sets as an alternative to arrays when the order of elements isn’t important and performance in testing whether an object is contained in the set is a consideration—while arrays are ordered, testing for membership is slower than with sets.”
意思是在不考虑顺序的情况下,测试是否包含object,最好用NSSet,并且NSSet的性能比NSArry好.

用法也十分简单,一步搞定方便:
dataArray 里还有重复的数据
NSSet *set = [NSSet setWithArray:dataArray];
此时,set里面的所有成员已经是非重复的。
如果需要排序,转回NSArray类型进行排序即可。
NSArray *dataArray =[set allObjects]

你可能感兴趣的:(关于数组去除重复的数据的方法推荐)