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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将数组里相同元素提取出来相关的知识,希望对你有一定的参考价值。

将数组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);

 

以上是关于将数组里相同元素提取出来的主要内容,如果未能解决你的问题,请参考以下文章

ARCGIS里面2个面图层,部分面完全相同(包括属性),部分不同,请教:如何将相同的面提取出来?

Xcode怎样查看数组中每一个数的值?

Django-----模板嵌套

java数组中判断是不是有相同的元素

Django -- 开始创建应用

php 数组相同的元素组合并在一起