swift
1var x = Int(arc4random_uniform(UInt32(numbers.count)))
このx
は要素ではなく添字です。必要なのは添字ではなく要素です。
例えば、最初の2回の乱数が0だった場合、
swift
1var numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
2a = 0
3numbers.removeAtIndex(a)// -> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
4b = 0
5numbers.removeAtIndex(b)// -> numbers = [2, 3, 4, 5, 6, 7, 8, 9]
となり、a=0
、b=0
になってしまいます。(0は添字であり、要素ではない)
正しくは、a=0
、b=1
にならないといけません。
乱数値(添字)を元にnumbersから要素を取り出さないといけませんが、削除してからだと取り出せませんので、削除する前に一旦保存することにします。
swift
1var tmp
2var a = Int(arc4random_uniform(UInt32(numbers.count)))
3tmp = numbers[a]//要素を保存
4numbers.removeAtIndex(a)//要素削除
5a = tmp//保存しておいた要素を取得
6//(以下、b,c,dも同様に)
ここで朗報です。
都合の良いことにremoveAtIndex()
の返値は削除した要素なのです。
ヘッダファイルに書いてました。
swift
1/// Remove and return the element at index `i`.
これはどういうことかと言うと、削除と同時にその要素を取得出来るということです。
例えば、
swift
1var numbers = [100, 200, 300]
2print( numbers.removeAtIndex(1) )
3print( numbers )
とすると、
こう出力されます。
200
の削除と同時に200
が出力されていますね。
以上を踏まえて最終的なソースを書くと、
swift
1var numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
2var a = Int(arc4random_uniform(UInt32(numbers.count)))
3a = numbers.removeAtIndex(a)
4var b = Int(arc4random_uniform(UInt32(numbers.count)))
5b = numbers.removeAtIndex(b)
6var c = Int(arc4random_uniform(UInt32(numbers.count)))
7c = numbers.removeAtIndex(c)
8var d = Int(arc4random_uniform(UInt32(numbers.count)))
9d = numbers.removeAtIndex(d)
10
11print( a, b, c, d )
となります。
長々と書きましたが、a =
、b =
って付け加えただけです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。