IOS开发之路-Objective-C 集合下(实战2)



集合包含 数组  ,  字典  , 和SET


今天老师讲集合提到了打乱文件顺序.


于是,下午我用集合写了个打乱个打乱数组顺序的程序


主要想法就是利用 set  的不可重复性。利用随机数来打乱数组排列

实现类似洗牌发牌的原理。
程序BUG :  效率较低  如果数组较长,程序就会很耗内存。甚至卡死 


运行结果:

2013-08-06 18:48:50.334 打乱顺序的数组[2091:303] --------打乱前--------打乱后--------

2013-08-06 18:48:50.337 打乱顺序的数组[2091:303] ----------0------------1--------

2013-08-06 18:48:50.337 打乱顺序的数组[2091:303] ----------1------------0--------

2013-08-06 18:48:50.338 打乱顺序的数组[2091:303] ----------2------------2--------

2013-08-06 18:48:50.338 打乱顺序的数组[2091:303] ----------3------------7--------

2013-08-06 18:48:50.339 打乱顺序的数组[2091:303] ----------4------------9--------

2013-08-06 18:48:50.339 打乱顺序的数组[2091:303] ----------5------------4--------

2013-08-06 18:48:50.339 打乱顺序的数组[2091:303] ----------6------------6--------

2013-08-06 18:48:50.340 打乱顺序的数组[2091:303] ----------7------------5--------

2013-08-06 18:48:50.340 打乱顺序的数组[2091:303] ----------8------------8--------

2013-08-06 18:48:50.341 打乱顺序的数组[2091:303] ----------9------------10--------

2013-08-06 18:48:50.341 打乱顺序的数组[2091:303] ----------10------------3--------

2013-08-06 18:48:50.342 打乱顺序的数组[2091:303] ----------11------------12--------

2013-08-06 18:48:50.342 打乱顺序的数组[2091:303] ----------12------------11--------



献上代码:


#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        NSMutableArray *array = [NSMutableArray arrayWithCapacity:100];   //创建可变数组
        NSMutableArray *array2 = [NSMutableArray arrayWithCapacity:100];
        NSMutableSet *set = [NSMutableSet setWithCapacity:100];   // 创建可变set集
        NSMutableSet *set2 = [NSMutableSet setWithCapacity:100];
       
        for (int i  = 0;  i < 13 ;  i++ ) {
            NSNumber *number = [NSNumber numberWithInt:i];    // 对数组进行遍历输入数据
            [array addObject:number];
        }
        [set addObjectsFromArray:array];
           NSLog(@"--------打乱前--------打乱后--------");
        int i  = 0;
        int count =(int )[array count];
        do {
            int randomNumber = arc4random()% count;       // 随机生成一个数
            NSNumber *number = [NSNumber numberWithInt:randomNumber];  //封装为oc类型
            if (   NULL == [set2 member:[array objectAtIndex:randomNumber]] )  // 判断set2是否包含 array数组上第number个元素
            {
                [set2 addObject:number];
                NSMutableString *tmpStr = [array objectAtIndex:randomNumber];
                [array2 addObject:tmpStr];
                i++;
            }
        } while ( 0 ==  [set isEqualToSet:set2]  );   // 如果 两个 set集相同则结束
        for ( int i = 0 ;  i < [array2 count] ; i++)
        {
            NSLog(@"----------%@------------%@--------",[array objectAtIndex:i],[array2 objectAtIndex:i]);
        }
        }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值