如何使用arc4random()select值的范围
使用arc4random()时可以设置一个数字范围吗? 例如只有50-100。
正如下面的其他post所指出的那样,最好使用arc4random_uniform
。 (当这个答案最初写的时候, arc4random_uniform
不可用)。 除了避免arc4random() % x
的模偏,还可以避免在短时间内recursion使用arc4random
的种子问题。
arc4random_uniform(4)
会生成0,1,2或3.因此你可以使用:
arc4random_uniform(51)
只需在结果中加50即可得到50和100之间的范围。
扩展JohnK的评论。
build议您使用以下函数返回一个范围的随机数:
arc4random_uniform(51)
这将返回一个范围在0
到50
的随机数。
然后你可以添加你的下界,如下所示:
arc4random_uniform(51) + 50
这将返回一个范围在50
到100
的随机数。
我们在arc4random() % 51
使用arc4random_uniform(51)
的原因是为了避免模偏差 。 这在手册页中突出显示如下:
arc4random_uniform(upper_bound)将返回一个小于upper_bound的均匀分布的随机数。 arc4random_uniform()build议比arc4random()%upper_bound''这样的结构更好,因为当上限不是2的幂时,它避免了“模偏置”。
总之,你会得到一个更均匀分布的随机数生成。
int fromNumber = 10; int toNumber = 30; int randomNumber = (arc4random()%(toNumber-fromNumber))+fromNumber;
将产生10
到30
之间的randon number
,即11,12,13,14......29
您可以使用此代码来生成范围为随机值:
//range from 50 to 100 int num1 = (arc4random() % 50) + 50; or int num1 = arc4random_uniform(50) + 50; //range from 0-100 int num1 = arc4random() % 100; or int num1 = arc4random_uniform(100);
在Swift中你可以使用这个(由@Justyn的答案启发)
func generateRandomKey(fromRange rangeFrom:Int, toRange rangeTo:Int) -> Int{ let theKey = arc4random_uniform(UInt32(rangeTo - rangeFrom)) + UInt32(rangeFrom) return Int(theKey) }
总会给你一个随机的整数范围。
在许多情况下10到30意味着包容性(包括10和30)…
int fromNumber = 10; int toNumber = 30; toNumber ++; int randomNumber = (arc4random()%(toNumber-fromNumber))+fromNumber;
请注意,与数字的区别 – fromNumber现在是21 …(20 + 1),从0到20(包含)的可能结果是10到30(包括10)。