2015-04-04 79 views
0

我試圖弄清楚這一點,但是NSSet(array:x).allObjects只能與[Int]一起使用。在SWIFT中生成隨機不可重複數組

如何獲得生成隨機不可重複數組?

var x = map(1...5) { _ in arc4random_uniform(15)} 
let xNonRepating = NSSet(array: x).allObjects 
if x.count != xNonRepating.count { 
    //do nothing 
} else { 
    x = map(1...5) { _ in arc4random_uniform(15)} 
    println(x) 
} 

回答

0

首先你要的結果從arc4random_uniform轉換爲INT:

var draw = map(1...5) { _ in Int(arc4random_uniform(15))} 

然後,你需要創建一個while循環將只執行如果包含您的NSSet數組中的獨特元素的數量小於繪製計數。

var badDrawCounter = 0 
while NSSet(array: draw).count < draw.count { 
    //it will only enter here if there was a repeated number in your draw 
    badDrawCounter++ 
    println("bad draw = \(draw)") 
    // lets draw it again and if the result is not ok it will stay looping until you get a good draw (no repeating numbers) 
    draw = map(1...5) { _ in Int(arc4random_uniform(15))} 
} 

println(draw) 
+0

你能否請你的答案給出一個解釋爲什麼這段代碼回答這個問題的解釋?僅限代碼答案[不鼓勵](http://meta.stackexchange.com/questions/148272),因爲他們沒有教導解決方案。 – DavidPostill 2015-04-05 05:23:38

+0

@DavidPostill done – 2015-04-05 05:34:37

+0

謝謝你真的很有幫助:) @Duncun,抱歉沒有正確定義我的問題 – ra45 2015-04-05 22:07:15

0

這是不是很清楚你在問什麼。

如果你希望能夠不重複獲取了一個數組對象,使用這樣的:

var seedArray = ["one", "two", "three", "four", "five"] 
var randomArray = Array() 


func randomString -> String 
{ 
    if randomArray.count = 0 
    { 
    randomArray += seedArray 
    } 
    return randomArray.removeAtIndex(arc4random_uniform(randomArray.count)) 
} 

你能適應上述方法持有任何類型的對象的數組,或將其更改爲通用,以便可以管理任何類型的所需對象的數組。