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

时间:2015-11-20 06:06:22

标签: ios random swift2

我想从数字范围返回随机数。返回号码只会返回一次,直到所有号码都返回。

我正在使用以下代码生成随机数,但是额外我只需要获取一次数字吗?

功能:

    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

请建议我做些改动。

1 个答案:

答案 0 :(得分:1)

此函数创建一个数组,其中包含从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)")
    }
}