我想从数字范围返回随机数。返回编号将只有一次,直到所有编号返回为止。

我正在使用以下代码来生成随机数,但是我还要做额外的操作才能仅获得一次?

功能:

    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)")
    }
}

关于ios - 从范围内仅获取一次随机数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33820031/

10-11 23:18