应用场景及目的:
1:统计数组中相同元素的个数。
2:排序,选出数组中数量最多的前三项。
- (void)viewDidLoad {
[superviewDidLoad];
// Do any additional setup after loading the view from its nib.
//统计数组相同元素的个数
NSMutableDictionary *dic = [[NSMutableDictionaryalloc] init];
//需要统计的数组
NSMutableArray *array = [[NSMutableArrayalloc]initWithObjects:@"a",@"b",@"b",@"c",@"c",@"c",@"a",@"b",@"b",@"c",@"d",@"e",nil];
// array = [[NSMutableArray alloc]initWithArray:@[@"1",@"5",@"2",@"3"]];
// [self bubbleSortDesc:array];//数组排序
NSSet *set = [NSSetsetWithArray:array];
NSMutableArray *keyArray = [[NSMutableArrayalloc]initWithCapacity:0];
NSMutableArray *valueArray = [[NSMutableArrayalloc]initWithCapacity:0];
for (NSString *setstringin set) {
//需要去掉的元素数组
NSMutableArray *filteredArray = [[NSMutableArrayalloc]initWithObjects:setstring,nil];
NSMutableArray *dataArray = array;
NSPredicate * filterPredicate = [NSPredicatepredicateWithFormat:@"NOT (SELF IN %@)",filteredArray];
//过滤数组
NSArray * reslutFilteredArray = [dataArrayfilteredArrayUsingPredicate:filterPredicate];
NSLog(@"Reslut Filtered Array = %@",reslutFilteredArray);
int number = (int)(dataArray.count-reslutFilteredArray.count);
NSLog(@"number :%d",number);
[keyArray addObject:setstring];
[valueArray addObject:[NSStringstringWithFormat:@"%d",number]];
[dic setObject:[NSStringstringWithFormat:@"%d",number]forKey:setstring];
}
NSLog(@"dic :%@",dic);
NSMutableArray *arr = [selfbubbleSortDesc:keyArray valueArray:valueArray];
NSLog(@"arr==%@",arr);
}
-(void)bubbleSortDesc:(NSMutableArray *)list{
if (list.count <=1) {
return;
}
int i, y;
BOOL bFinish =YES; //是否发生数据交换
for (i =1; i<= [list count] && bFinish; i++) {
bFinish = NO;//每次遍历时,重置标志
//从最后一位开始,依次跟前一位相比,如果较小,则交换位置
//当一次遍历没有任何数据交换时,则说明已经排序完成(bFinish=YES),则不再进行循环
for (y = (int)[listcount]-1; y>=i; y--) {
if ([[listobjectAtIndex:y] intValue] > [[list objectAtIndex:y-1]intValue]) {
//交换位置
[list exchangeObjectAtIndex:y-1withObjectAtIndex:y];
bFinish =YES;//发生数据交换,则继续进行下一次遍历,直到未发生数据交换或者循环完成为止
}
}
}
NSLog(@"list=%@",list);
}
-(NSMutableArray *)bubbleSortDesc:(NSMutableArray *)keyArray valueArray:(NSMutableArray *)valueArray{
if (valueArray.count <=1) {
returnnil;
}
int i, y;
BOOL bFinish =YES; //是否发生数据交换
for (i =1; i<= [valueArray count] && bFinish; i++) {
bFinish = NO;//每次遍历时,重置标志
//从最后一位开始,依次跟前一位相比,如果较小,则交换位置
//当一次遍历没有任何数据交换时,则说明已经排序完成(bFinish=YES),则不再进行循环
for (y = (int)[valueArraycount]-1; y>=i; y--) {
if ([[valueArrayobjectAtIndex:y] intValue] > [[valueArray objectAtIndex:y-1]intValue]) {
//交换位置
[valueArray exchangeObjectAtIndex:y-1withObjectAtIndex:y];
[keyArray exchangeObjectAtIndex:y-1withObjectAtIndex:y];
bFinish =YES;//发生数据交换,则继续进行下一次遍历,直到未发生数据交换或者循环完成为止
}
}
}
NSLog(@"keyArray=%@",keyArray);
return keyArray;
}
打印结果:
Reslut Filtered Array = (
b,
b,
c,
c,
c,
b,
b,
c,
d,
e
)
2017-07-19 15:00:41.341 MobileOffice[2422:160558] number :2
2017-07-19 15:00:41.341 MobileOffice[2422:160558] Reslut Filtered Array = (
a,
c,
c,
c,
a,
c,
d,
e
)
2017-07-19 15:00:41.341 MobileOffice[2422:160558] number :4
2017-07-19 15:00:41.342 MobileOffice[2422:160558] Reslut Filtered Array = (
a,
b,
b,
a,
b,
b,
d,
e
)
2017-07-19 15:00:41.342 MobileOffice[2422:160558] number :4
2017-07-19 15:00:41.342 MobileOffice[2422:160558] Reslut Filtered Array = (
a,
b,
b,
c,
c,
c,
a,
b,
b,
c,
e
)
2017-07-19 15:00:41.343 MobileOffice[2422:160558] number :1
2017-07-19 15:00:41.343 MobileOffice[2422:160558] Reslut Filtered Array = (
a,
b,
b,
c,
c,
c,
a,
b,
b,
c,
d
)
2017-07-19 15:00:41.343 MobileOffice[2422:160558] number :1
2017-07-19 15:00:41.343 MobileOffice[2422:160558] dic :{
a = 2;
b = 4;
c = 4;
d = 1;
e = 1;
}
2017-07-19 15:00:41.344 MobileOffice[2422:160558] keyArray=(
b,
c,
a,
d,
e
)
2017-07-19 15:00:41.344 MobileOffice[2422:160558] arr==(
b,
c,
a,
d,
e
)