###前提・実現したいこと
swift3
xcode8で作業しています
swiftで配列をランダムに並べ替えたくてPlaygroundで練習しています。
以下のサイトを参考に作業しております。
Swift:重複しない乱数について
順列を一瞬で取得するプログラム
2つ目のリンクの内容をswiftで表現したいのですが、うまくいかなくて困っております
###発生している問題・エラーメッセージ
fatal error : index out of range
###該当のソースコード
swift
1 2// 元はJavascriptの「n個の数字の順列において、辞書式順序のm番目を戻す」コードだそうです 3 4let n:Int = 5 5var m:Int = 2 6 7 var temp:[Any] = [] 8 for i in 0..<n{ 9 temp[i] = i 10 } 11 12 var surplus:[Any] = [] 13 14 for i in 1..<n{ 15 // この下の行で上記のエラーが出現します。 16 surplus[n - i] = m % i 17 m = Int(floor(Double(m/i))) 18 } 19 20 surplus[0] = m 21 22 var order:[Any] = [] 23 for i in 0..<n{ 24 let num:Int = surplus[i] as! Int 25 order[i] = temp[num] 26 for j in num..<n - 1{ 27 temp[j] = temp[j + 1] 28 } 29 } 30 31print(order)
###試したこと
上記のほかでも、配列の順列(重複しない乱数)を取得できる方法があれば、それでも構わないので、ご存知の方がいらしたら教えていただきたいです。
###補足情報(言語/FW/ツール等のバージョンなど)
そのほかにもm = Int(floor(Double(m/i)))のところやfor j in num..<n - 1のところが本来のものと違ったりして、おかしい場所があるので、ついでに教えていただけると助かります。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/23 11:11