您的位置:首页 > 移动开发 > Objective-C

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

2013-08-06 18:58 387 查看



集合包含 数组 , 字典 , 和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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: