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

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

时间: 2024-08-10 21:29:37

将数组里相同元素提取出来的相关文章

用for循环将数组里的元素排序

#include<stdio.h>int  main() //定义数组的容量# define SIZE 6{ unsigned int i,j,temp;//定义要用的相关变量int a[SIZE]={12,45,14,96,56,23};printf("冒泡排序前:");for(i=0;i<SIZE;i++)//for循环输出排序前数组里的元素{printf("%d",a[i]); } //计算机内部进行排序操作 for(i=0;i<SIZ

Java比较两个数组里的元素是否相等

比较两个数组里的元素是否相等可以使用Arrays类调用equals()方法进行比较.不能用==比较,==比的是两个数组对象的地址,如果是两个不同的对象,结果会一直是false . package _3_5_test; import java.util.Arrays; public class FifityFiveTest { public static void main(String[] args) { // TODO Auto-generated method stub String le1

对象和数组-把数组里的元素按照自然排序

———————————————————————— <script type="text/javascript">                var arr = new Array();        //创建一个数组            for(var i=0;i<10;i++){        //遍历打印数组的值                //数组的值随机获得,100一下的正整数                arr[i] = Math.floor(Ma

java遍历数组并重新拼接数组里的元素

public ArrayList getinferfacelist(ArrayList<TaskNameList> taskNameLists) { String interfaceName=""; String splitedWorkTable = ""; ArrayList interfaceNameList =new ArrayList(); //遍历获取作业名list里的每个作业名 for(TaskNameList taskNameList:ta

将一个数组里的元素添加到另外一个数组里

// ES5的写法 var arr1 = [0, 1, 2]; var arr2 = [3, 4, 5]; Array.prototype.push.apply(arr1, arr2); // ES6的写法 var arr1 = [0, 1, 2]; var arr2 = [3, 4, 5]; arr1.push(...arr2);

查找数组里相同元素的个数

int[] list = new int[] { 1,1,2,3,1,2,4,3,3,2,4,5,6,5,6,7,3,2,8}; Dictionary<int, int> dic = new Dictionary<int, int>(); foreach (int item in list) { if (!dic.ContainsKey(item)) { dic[item] = 1; } else { dic[item]++; } } foreach (var item in di

Substring with Concatenation of All Words, 返回字符串中包含字符串数组所有字符串元素连接而成的字串的位置

问题描述:给定一个字符数组words,和字符串s,返回字符数组中所有字符元素组成的子串在字符串中的位置,要求所有的字符串数组里的元素只在字符串s中存在一次. 算法分析:这道题和strStr很类似.只不过strStr是子串,而这个题是字符串数组里的元素组成的子串,字符串数组里的元素是无序的,但是必须全部包含.所有考虑使用map集合.关键点在于几个临界值,字符串元素在s中重复了怎么做,找到一个符合的子串后怎么做,有字符串元素不匹配怎做. import java.util.ArrayList; imp

js删除数组里的某个元素

首先可以给js的数组对象定义一个函数,用于查找指定的元素在数组中的位置,即索引,代码为: Array.prototype.indexOf = function(val) { for (var i = 0; i < this.length; i++) { if (this[i] == val) return i; } return -1; }; 然后使用通过得到这个元素的索引,使用js数组自己固有的函数去删除这个元素:代码为: Array.prototype.remove = function(v

水贴王之续,找出数组里出现频率最高的元素

找出数组里出现频率最高的元素 个人信息:就读于燕大本科软件工程专业 目前大三; 本人博客:google搜索"cqs_2012"即可; 个人爱好:酷爱数据结构和算法,希望将来从事算法工作为人民作出自己的贡献; 博客内容:水贴王问题之续 博客时间:2014-5-12; 编程语言:Java ; 编程坏境:Windows 7 专业版 x64; 编程工具:jdk,eclipse x64; 制图工具:office 2007 powerpoint; 硬件信息:7G-3 笔记本; 真言: 痛苦的活着比