标签:
将数组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