关于NSArray的去重

提到去重,第一反应就是for或while循环来遍历处理.

然后有了几种思路:

1) 两个循环嵌套 对比 然后去重:

但是这种方法会数据丢失,

arr为要去重的数组

1  for (int i=0; i<arr.count; i++) {
2     for(int j=0;j<arr.count;j++)
3             if([arr[i]==arr[j]]){
4                 [arr removeObjectAtIndex:j];
5             }
6         }

2) 然后就是 第 i 个 元素 与  第 i+1 个元素比对 去重

 for (int i=0; i<arr.count-1; i++) {
            if([arr[i] isEqualToString:arr[i+1]]){
                [arr removeObjectAtIndex:i];
                i--; //因为去除一个元素后arr.count也发生了改变,所以这里也要将i--
            }
        }

上面这种方法大致可以去重了,但是,如果最后一位元素与第一位元素相同,那么,你也是去不掉..

3)完美去重的方法:

所以在这里,我们新建一个可变数组,然后将原数组做一个isEqualTo的判断,再添加进新数组.

    NSMutableArray *newArr = [NSMutableArray array];
    for (int i=0; i<arr.count-1; i++) {
            if([newArr containsObject:[arr objectAtIndex:i]]==0){
                [newArr addObject:[arr objectAtIndex:i]];
            }
        }
时间: 2024-10-26 00:29:10

关于NSArray的去重的相关文章

iOS 基础之NSArray数组去重

1.面试题 现在有一个数组arr1,它里面存储的字符串分别为@“zhangsan”@“lisi”@“wangwu”@“lisi”@“zhangsan”,请将它去重后赋值给可变数组arr2输出为:@“zhangsna”,@“lisi”,@“wangwu”. 解题思路: 1)创建一个可变字典 2)遍历这个数组将数组的字符串存储为这个字典的key和value 3)调用字典的一下任意一个方法 @property (readonly, copy) NSArray<KeyType> *allKeys; @

数组去重方法总结

这几天正在整理面试题,顺便把以前学的东西给总结一下,数组去重,我猜面试应该考的几率还是蛮高的,所以下面就让博主给讲讲iOS数组去重的几种方法. 第一种:冒泡排序,然后挨个挨个比较,这个没什么可说的,关键是麻烦,而且时间复杂度也挺大的,所以博主就不给讲了. 第二种:利用数组排序. NSArray *array = @[@"小玉",@"小小鱼",@"小玉"]; //数组去重方法---方法1 //建立一个新的的可变数组,数组长度为0 NSMutable

iOS开发——有序数组去重的几种算法

算法,在学校的时候就掌握的不牢固,如今还是要还上了. NSMutableArray *dateMutablearray = [@[] mutableCopy]; NSArray *array1 = @[@"1",@"2",@"3", @"3",@"4",@"5",@"7",@"9",@"9", @"11",]

[Tips]NSArray 使用小技巧

NSArray相信做iOS开发的几乎天天都要用到,有些情况下,我们需要对数组进行去重和排序,一般的写法无非就是先遍历,再处理结果,其实,我们有更简便的办法来搞定. 数组快速去重 NSArray *[email protected][@"one", @"two", @"one"]; tmpArray = [tmpArray valueForKeyPath:@"@distinctUnionOfObjects.self"]; 这样,

添加新数组去重 MJ刷新数据时用到

// 2个数组去重方法封装, 返回新数组, 添加了不重复的新对象 - (数量变多) - (NSMutableArray *)quChongWithOldArr:(NSMutableArray *)oldArr addNewArr:(NSArray *)newArr {     NSMutableArray *resultArr = [NSMutableArrayarray];          for (VShowRoomObject * newRoom in newArr) {        

iOS数组的去重,判空,删除元素,删除重复元素 等

一: 去重 有时需要将NSArray中去除重复的元素,而存在NSArray中的元素不一定都是NSString类型.今天想了想,加上朋友的帮助,想到两种解决办法,先分述如下. 1.利用NSDictionary的AllKeys(AllValues)方法 可以将NSArray中的元素存入一个字典,然后利用AllKeys或者AllValues取得字典的所有键或值,这些键或值都是去重的. 示例代码: NSArray *arr = @[@111,@222,@111]; NSMutableDictionary

iOS 数组的去重(普通的无序的去重和排序好的去重)

本文转载至 http://blog.csdn.net/zhaopenghhhhhh/article/details/24972645 有时需要将NSArray中去除重复的元素,而存在NSArray中的元素不一定都是NSString类型.今天想了想,加上朋友的帮助,想到两种解决办法,先分述如下. 1.利用NSDictionary的AllKeys(AllValues)方法 可以将NSArray中的元素存入一个字典,然后利用AllKeys或者AllValues取得字典的所有键或值,这些键或值都是去重的

数组中存放model去重

在这个项目中出现"添加model数据"数组重复的情况,这就涉及到数组去重的问题了...... 1. 一开始使用的最笨的方法: 依次循环两个数组(原有的数组,选择的数组),双重for循环判断model.code是否相等,不相等才存放到数组中,在这里,可能是自己循环有问题,一直出现的是数组中添加了很多的重复数据,所有,去重失败. 2.接着第一种方法,然后双重for循环,将不相等model存放到数组,再利用NSMutableSet对数组去重,成功实现. NSSet *set = [NSSet

将MySQL去重操作优化到极致之三弹连发(一):巧用索引与变量

元旦假期收到阿里吴老师来电,被告知已将MySQL查重SQL优化到极致:100万原始数据,其中50万重复,把去重后的50万数据写入目标表只需要9秒钟.这是一个惊人的数字,要知道仅是insert 50万条记录也需要些时间的.于是来了兴趣,自己实验.思考.总结做了一遍. 一.问题提出        源表t_source结构如下:item_id int,created_time datetime,modified_time datetime,item_name varchar(20),other var