2015-11-20 34 views
1

我想返回数字范围内的随机数。返回号码将只有一次,直到所有号码将被退回。从范围获得随机数只有一次

我使用下面的代码来产生随机数,但额外的我必须做的只有一次数字?

功能:

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到最大值(在您的情况下为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)") 
    } 
} 
相关问题