集合包含 数组 , 字典 , 和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;
}