1

我正在尝试在我的一个应用程序中使用 GKShuffledDistribution,但 nextInt(upperBound:) 方法的工作方式与 nextInt 方法不同,因为它不会耗尽所有可能的值。为了演示,打开一个操场并执行以下操作:

import GameplayKit
let shuffled = GKShuffledDistribution.init(lowestValue: 0, highestValue: 100)

for _ in 0...25{
    shuffled.nextInt(upperBound: 100)
}

我使用这种方法得到了 2 个重复项。如果我将其替换为:

shuffled.nextInt()

我没有得到任何重复。这是 nextInt(upperBound:) 应该如何工作的吗?如果是的话,有人可以指出我解释这一点的文档吗?谢谢。

4

1 回答 1

1

upperBoundlowestValue提供的目的是让您在您的和新的(临时)之间请求一个随机值,该值highestValue小于highestValue您在创建GKShuffledDistribution实例时设置的值。

哎呀。真是嘴馋。

让我更形象地尝试一下。

如果您通常想要一个介于 0 和 20 之间的随机数,但有时您想要一个仅介于 0 和 10 之间的随机数,来自同一个随机播放,那么您可以将 upperBound 设置为 10,然后将“拉出”一个介于 0 和 10 之间的数字,在您当前的随机播放周期中剩余的数字中。

嗯……至少我认为它应该是这样工作的。

从理论上讲,当您将 设置upperBound为 100 时,如您的示例所示,highestValue应该是活动的决定因素,因为文档建议:

此方法生成的数字的实际上限是highestValue 属性和upperBound 参数中的较小者。

于 2017-01-24T10:54:14.963 回答