使用arc4random()时如何选择值范围

时间:2010-08-06 02:16:13

标签: ios objective-c arc4random

使用arc4random()时可以设置一系列数字吗?例如仅50-100。

6 个答案:

答案 0 :(得分:68)

正如下面其他帖子所指出的,最好使用arc4random_uniform。 (最初编写此答案时,arc4random_uniform不可用)。除了避免arc4random() % x的模偏差外,它还避免了在短时间帧内递归使用时arc4random的播种问题。

arc4random_uniform(4)

将生成0,1,2或3.因此您可以使用:

arc4random_uniform(51)

只需在结果中加50即可得到50&之间的范围。 100(含)。

答案 1 :(得分:27)

扩展JohnK评论。

建议您使用以下函数返回一个范围随机数:

arc4random_uniform(51)

会返回050范围内的随机数。

然后你可以在下面添加你的下限:

arc4random_uniform(51) + 50

会返回50100范围内的随机数。

我们使用arc4random_uniform(51)超过arc4random() % 51的原因是为了避免使用modulo bias。这在手册页中突出显示如下:

  

arc4random_uniform(upper_bound)将返回小于upper_bound的均匀分布的随机数。 arc4random_uniform()建议使用像``arc4random()%upper_bound''这样的结构,因为当上限不是2的幂时,它避免了“模偏差”。

简而言之,您可以获得更均匀分布的随机数。

答案 2 :(得分:18)

int fromNumber = 10;
int toNumber = 30;
int randomNumber = (arc4random()%(toNumber-fromNumber))+fromNumber;

将在randon number10之间生成30,即11,12,13,14......29

答案 3 :(得分:3)

您可以使用此代码生成范围为

的随机值
//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);

答案 4 :(得分:1)

在Swift中你可以使用它(灵感来自@Justyn的答案)

func generateRandomKey(fromRange rangeFrom:Int, toRange rangeTo:Int) -> Int{

    let theKey = arc4random_uniform(UInt32(rangeTo - rangeFrom)) +  UInt32(rangeFrom)
    return Int(theKey)
}

总会给你一个随机范围的整数。

答案 5 :(得分:0)

在许多情况下,10到30意味着包容性,(包括10和30)......

int fromNumber = 10;
int toNumber = 30;
toNumber ++;
int randomNumber = (arc4random()%(toNumber-fromNumber))+fromNumber;

注意差异toNumber - fromNumber现在是21 ...(20 + 1),它产生0到20(包括)的可能结果,当加到fromNumber(10)时,得到10到30(含)。 / p>