从范围中只获取一次随机数



我想从数字范围中返回随机数。在返回所有编号之前,返回编号将仅为一次。

我使用以下代码生成随机数,但我必须做额外的事情才能得到一次数字?

功能:

    func randomNumber(range: Range<Int> = 1...3) -> Int {
     let min = range.startIndex
     let max = range.endIndex
     return Int(arc4random_uniform(UInt32(max - min))) + min
    } 

呼叫:

    var ran = randomNumber(0...36)

输出:

ran: 30
ran: 16
ran: 0
ran: 14
ran: 18
ran: 7
ran: 20
ran: 13
ran: 26
ran: 26
ran: 3
ran: 12
ran: 35
ran: 27
ran: 0
ran: 5
ran: 5
ran: 3

请告诉我要做什么改变。

此函数创建一个数组,其中包含从0到最大值(在您的情况下为36)的所有数字。然后,它复制数组,并从复制的数组中获取随机索引。拾取该数字后,它将从复制的阵列中删除。只要原始数组中有数字,就重复多次。

func random(max: Int) {
    var numbers = [Int]()
    for x in 0...max {
        numbers.append(x)
    }
    var numbersCopy = numbers
    for _ in 0..<numbers.count {
        let randomIndex = Int(arc4random_uniform(UInt32(numbersCopy.count)))
        let result = numbersCopy.removeAtIndex(randomIndex)
        print("Random Number: (result)")
    }
}

最新更新