object-c 随机数总结
解决几个典型的问题:
如何生成一个 Objective-C 的随机数?
使用arc4random()
具体而言,产生一个0-n-1之间的随机数,使用arc4random_uniform(),从而避免模偏差
NSUInteger r = arc4random_uniform(N);
0
到 1
之间的随机浮点数(double)
如果你要生成一个随机 double
或 float
,另一个很好的选择是功能较模糊的 rand48
家族,包括 drand48(3)
。
srand48(time(0));
for (int i = 0; i < 10; i++) {
double r = drand48();
NSLog(@"%f[%d]", r, i);
}
不像 arc4random
函数, rand48
函数在产生随机数之前需要种子的初始值。这个种子函数 srand48(time(0))
应该只运行一次。
如何从一个 NSArray
选择一个随机元素?
NSArray *arr = @[@1, @2, @3, @5, @0]; if ([arr count] > 0) { id obj = arr[arc4random_uniform((u_int32_t)[arr count])]; NSLog( @"%@", obj); }
如何随机排序一个 NSArray
?
NSArray *arr = @[@1, @2, @3, @5, @0]; NSMutableArray *a = [NSMutableArray arrayWithArray:arr]; if ([arr count] > 1) { for (NSUInteger i = [arr count] - 1; i > 0; --i) { [a exchangeObjectAtIndex:i withObjectAtIndex:arc4random_uniform((u_int32_t)(i + 1))]; } } NSLog(@"%@", a);
生成一个随机的小写 NSString
如果你是对一个已知的,连续范围的 Unicode 字符做处理,例如小写字母 (U+0061
— U+007A
),你可以从 char
做一个简单的换算:
NSString *letter = [NSString stringWithFormat:@"%c", arc4random_uniform(26) + 'a'];
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步