我需要在Swift中为我的游戏创建一个随机的bool值。
基本上,如果是(或1),则生成一个对象,如果否(或0),则生成另一个对象。
到目前为止,在这里看this question和类似的一个,我发现了这个:
let randomSequenceNumber = Int(arc4random_uniform(2))
现在它有效,但似乎偏向0对我来说......就像荒谬的偏见......
这就是我当时使用的值:
if(randomSequenceNumber == 0)
//spawn object A
else
//spawn object B
使用随机bool值有更好的方法来实现吗?那不是偏向某个值吗?
更新
在10,000次通话中生成了一些实验,以查看1
与0
的对等数量:{/ p>
func experiment() {
var numbers: [Int] = []
var tester: Int = 0
var sum = 0
for i in 0...10000 {
tester = Int(arc4random_uniform(2))
numbers.append(tester)
print(i)
}
for number in numbers {
sum += number
}
print("Total 1's: ", sum)
}
Test 1: Console Output: Total 1's: 4936
Test 2: Console Output: Total 1's: 4994
Test 3: Console Output: Total 1's: 4995
答案 0 :(得分:48)
import Foundation
func randomBool() -> Bool {
return arc4random_uniform(2) == 0
}
for i in 0...10 {
print(randomBool())
}
对于更高级的生成器,该理论可用here
基本了解伯努利(或二项式)分布检查here
答案 1 :(得分:19)
看起来像Apple的工程师在听
let randomBool = Bool.random()
答案 2 :(得分:16)
extension Bool {
static func random() -> Bool {
return arc4random_uniform(2) == 0
}
}
// usage:
Bool.random()