ios之算法-对随机数百分百产生有效不重复处理方法

// 方法一 标准算法 效率最高 每次产生一个数据把它依次置换到后面
NSMutableArray *number = [NSMutableArray array];
        for (int i = 0; i<20; i++) {
            [number addObject:[NSNumber numberWithInteger:i+1]];
        }

        for (int j = 0; j<20; j++) {
            NSInteger arc = arc4random()%(20-j);
            [number exchangeObjectAtIndex:arc withObjectAtIndex:20-j-1];
        }
        NSLog(@"%@",number);
        for (int k = 0; k<10; k++) {
            [number exchangeObjectAtIndex:20-1-k withObjectAtIndex:k];
        }
        NSLog(@"%@",number);

// 方法二:首先对需要产生的随机数用动态数组进行保存
        NSMutableArray *number = [NSMutableArray array];
        for (int i = 0; i<20; i++) {
            [number addObject:[NSNumber numberWithInteger:i+1]];
        }
 同时生成一个产生出随机数的动态数组 产生一个额额有效的加添一个 在把产生的那个数删掉(通过数组的下标来实现,产生一个下标添加到新数组中,在把之前那个保存数组中删掉次数,下次产生的随机下标范围就减一)
        NSMutableArray *num = [NSMutableArray array];
        for (int j = 0; j<20; j++) {
            NSInteger arc = arc4random()%number.count;

            [num addObject:[number objectAtIndex:arc]];//将产生的数添加到新数组中
            [number removeObjectAtIndex:arc];//删除原保存的数组
        }
        NSLog(@"%@",num);

你可能感兴趣的:(IOS开发实用技巧)