如何使用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) 

这将返回一个范围在050的随机数。

然后你可以添加你的下界,如下所示:

 arc4random_uniform(51) + 50 

这将返回一个范围在50100的随机数。

我们在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; 

将产生1030之间的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)。