我意识到Swift书提供了随机数生成器的实现.最好的做法是将此实现复制并粘贴到自己的程序中吗?或者是否有一个我们现在可以使用的库?
我正在尝试在Apple Swift(iOS)中编写一个函数,该函数将生成任意给定数量的独特随机数,这些随机数在给定的包含范围内,比如介于0和10之间.因此,如果我说我想要0和0之间的5个唯一随机数10,它将返回一个包含[7,10,2,3,0]或[7,10,2,8,0]等的数组.
我有这个部分与:
// Returns an array of unique numbers
func uniqueRandoms(numberOfRandoms: Int, minNum: Int, maxNum: UInt32) -> [Int] {
var uniqueNumbers = [Int]()
while uniqueNumbers.count < numberOfRandoms {
let randomNumber = Int(arc4random_uniform(maxNum + 1)) + minNum
var found = false
for var index = 0; index < uniqueNumbers.count; ++index {
if uniqueNumbers[index] == randomNumber {
found = true
break
}
}
if found == false {
uniqueNumbers.append(randomNumber)
}
}
return uniqueNumbers
}
print(uniqueRandoms(5, minNum: 0, maxNum: 10))
Run Code Online (Sandbox Code Playgroud)
现在我想添加将我不想要的范围内的单个数字列入黑名单的功能.说我仍然想要0到10之间的5个唯一随机数但是我不希望它包括8.
那部分导致无限循环(25%以上的时间或更多),我无法弄清楚为什么?这就是我所拥有的: …
我对良好或不良做法有疑问。
我创建了一个函数,该函数将生成一个随机数。如果随机数等于先前的随机数,则应生成一个新数。所以我的问题是。从方法中调用相同的方法是不好的做法吗?
func getRandomNumber(){ //<-- Method name
let randomNumber = Int.random(in: 0..<allPlayers.count)
if lastRoundNumber == randomNumber{
getRandomNumber() //<-- Like this
}
print(randomNumber)
}
Run Code Online (Sandbox Code Playgroud)
还是我应该这样做?如果是,怎么办?
因此,像我在上面的代码中所做的那样,从当前方法中调用相同的方法是不好的做法吗?提前致谢。
如果是,为什么不好?以及如何获得更好的代码?