GKShuffledDistribution - 使用上限不会用尽所有可能的值吗?
GKShuffledDistribution - using upperbound doesn't exhaust all possible values?
我正在尝试在我的一个应用程序中使用 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:) 应该是这样工作的吗?如果是的话,有人可以指点我解释这个的文档吗?谢谢。
提供 upperBound
是为了让您在 lowestValue
和新的(临时)highestValue
之间请求一个随机值,该值小于您已经获得的 highestValue
在创建 GKShuffledDistribution
实例时设置。
糟糕。真是嘴贱。
让我用更形象的方式尝试一下。
如果您通常想要一个介于 0 和 20 之间的随机数,但有时您想要一个仅介于 0 和 10 之间的随机数,那么您可以将 upperBound 设置为 10,并且数字将为 "pulled out" 介于 0 和 10 之间,是您当前洗牌周期中剩余的数字。
嗯...至少我认为它应该是这样工作的。
理论上,当您将 upperBound
设置为 100 时,如您的示例所示,highestValue
应该是 activity、since the docs suggest:[=19= 的行列式]
The actual upper bound on numbers generated by this method is the
lesser of the highestValue property and the upperBound parameter.
我正在尝试在我的一个应用程序中使用 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:) 应该是这样工作的吗?如果是的话,有人可以指点我解释这个的文档吗?谢谢。
upperBound
是为了让您在 lowestValue
和新的(临时)highestValue
之间请求一个随机值,该值小于您已经获得的 highestValue
在创建 GKShuffledDistribution
实例时设置。
糟糕。真是嘴贱。
让我用更形象的方式尝试一下。
如果您通常想要一个介于 0 和 20 之间的随机数,但有时您想要一个仅介于 0 和 10 之间的随机数,那么您可以将 upperBound 设置为 10,并且数字将为 "pulled out" 介于 0 和 10 之间,是您当前洗牌周期中剩余的数字。
嗯...至少我认为它应该是这样工作的。
理论上,当您将 upperBound
设置为 100 时,如您的示例所示,highestValue
应该是 activity、since the docs suggest:[=19= 的行列式]
The actual upper bound on numbers generated by this method is the lesser of the highestValue property and the upperBound parameter.