2015-11-20 67 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)") 
    } 
}