如何生成非重复随机数?
我在很多网站上都看过这个,但是他们提供了main.c文件代码。
当我使用main.c文件时,代码工作正常,但是当我尝试转换为my.m文件时,它无效。
示例:
我需要随机获取0-10之间的所有数字。数字不应再重复。
答案 0 :(得分:2)
使用arc4random() 例如:
- (NSData *)randomBytes:(size_t)count
{
NSMutableData *data = [NSMutableData dataWithLength:count];
SecRandomCopyBytes( kSecRandomDefault,
data.length,
data.mutableBytes);
return data;
}
事实证明,在一个范围内获取一个随机数并不像使用mod那么简单。
- (u_int32_t)randomInRangeLo:(u_int32_t)loBound toHi:(u_int32_t)hiBound
{
u_int32_t random;
int32_t range = hiBound - loBound + 1;
u_int32_t limit = UINT32_MAX - (UINT32_MAX % range);
do {
random = arc4random();
} while (random > limit);
return loBound + (random % range);
}
答案 1 :(得分:1)
CocoaFu提供了出色的随机数。你要求的是洗牌。最简单的是Fischer-Yates shuffle。 Wikipedia article中提供了几个好的版本。您还可以阅读CocoaFu算法避免的模偏差。
但是,在Objective-C中,C实现绝对没有理由完全相同。如果您在从.c
文件移至.m
文件时遇到问题,则应发布错误。