oc统计数组相同元素的个数,以及数组排序

应用场景及目的:

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

)


参考算法:http://www.knowsky.com/884554.html



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值