码迷,mamicode.com
首页 > 编程语言 > 详细

将数组里相同元素提取出来

时间:2016-06-02 00:41:50      阅读:342      评论:0      收藏:0      [点我收藏+]

标签:

将数组Arr里相同的元素提取出来放在一个小数组里,再将小数组放在一个大数组dataArry里

NSMutableArray *Arr =[NSMutableArray arrayWithObjects:@"1",@"2",@"1",@"3",@"2",@"2",@"4",@"1",@"2",@"2",@"2",@"2", nil];

1、创建一个数组dataArry

NSMutableArray *dataArr = [NSMutableArray array];

2、用两个for循环对Arr进行遍历

方法一、

for (NSInteger i = 0; i<Arr.count; i++) {

        NSMutableArray *tempArr = [NSMutableArray array];

        NSString *str = Arr[i];

        [tempArr addObject:str];

        for (NSInteger j = i+1; j<Arr.count; j++) {

            NSString *tempStr = Arr[j];

            if ([str isEqual:tempStr]) {

                [tempArr addObject:tempStr];

                [Arr removeObjectAtIndex:j]; //判断如果两个值一样则添加到tempArr里,再把此元素删除

            }

         }

        [dataArr addObject:tempArr];

     }

输出结果:dataArry:[[1,1,1],[2,2,2,2],[3],[2,2],[4],[2]]

 结果并不是我们想要的,问题出在Arr里的元素个数是会变的,而J的值是依次增加的,那么我们根据元素下标判断时就会出现错误

解决方法:1、把J的循环该成倒序

               for (NSInteger j = Arr.count-1; j>i; j--)

     {     

         }

     2、不要在for循环里删除元素,在for循环外面把Arr里整个tempArr数组里的元素全部删除,然后让i-1,始终保持从头开始遍历

     

     for (NSInteger i = 0; i<Arr.count; i++) {

            NSMutableArray *tempArr = [NSMutableArray array];

            NSString *str = Arr[i];

            [tempArr addObject:str];

            for (NSInteger j = Arr.count-1; j>i; j--) {

                  NSString *tempStr = Arr[j];

                  if ([str isEqual:tempStr]) {

                      [tempArr addObject:tempStr];

                  }

             }

            [dataArr addObject:tempArr];

            if (tempArr.count>1) {

               [Arr removeObjectsInArray:tempArr];

               i-=1;  

         }

         NSLog(@"dataArry:%@",dataArr);

 

将数组里相同元素提取出来

标签:

原文地址:http://www.cnblogs.com/fengzhilian/p/5551497.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!