zoukankan      html  css  js  c++  java
  • 关于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]];
                }
            }
  • 相关阅读:
    【CF932E】Team Work
    【ZJOI2011】看电影
    【CQOI2011】放棋子
    【HAOI2010】计数
    【HNOI2009】有趣的数列
    【ZJOI2010】排列计数
    【FJOI2016】建筑师
    【USACO10 OPEN】三角形计数
    【HNOI2012】排队
    【HNOI2008】越狱
  • 原文地址:https://www.cnblogs.com/qls1992/p/5325175.html
Copyright © 2011-2022 走看看