質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

1539閲覧

シャッフル処理が分かりません

aaaaaachannel

総合スコア37

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2017/10/30 08:53

編集2017/11/01 05:00

シャッフル関数の意味が分かりません

エラーメッセージ

###該当のソースコード

swift

1mutating func shuffle(){ 2 for i in 0..<self.count { 3 let j = Int(arc4random_uniform(UInt32(self.count))) 4 if i != j { 5 swap(&self[i], &self[j]) 6 } 7 8 } 9 10 } 11

###試したこと
関数jにいれた乱数は重複があるはずなのでiとちがった際に値を交換したとしても、配列に重複が生まれる気がするのですが、どうして重複なく、配列の値をシャッフルできたのか教えていただきたいです。
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

番号札を首から掛けた人たちを番号で指名して入れ替えているだけです。
呼び出す番号が重複しても人間はコピーされません。

投稿2017/11/01 06:11

編集2017/11/01 06:19
MasakiHori

総合スコア3384

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

Shuffle は混ぜる、順番をばらばらにするという意味の英語です。
質問のShuffle関数は、配列の要素どうしの入れ替え(Swap)をランダムに行う事によって配列の要素の順番をばらばらにしています。

要素に重複が含まれていない配列であった場合、その中の要素を入れ替えても要素の重複は生じません。
例えば(a,b,c,d,e,f)という配列があって、この中の2つの要素(例えば、2番目のbと5番目のe)を入れ替えても、(a,e,c,d,b,f)というように順序が変わるだけで、a,b,c,d,e,fの6種類の要素を含むという事は変わりません。

i=2の時にj=3となり、i=3の時にj=2となる事はあり得ます(jは乱数発生関数で作っていますから)
この場合、2番目と3番目の要素の値はShuffleする前後で変わりません。

要素数が偶数の場合、各要素のペアの間で2回Swapが起きる可能性はあって、その場合にはshuffleする前と後の配列が全く同じになります。
質問の「重複」が、Shuffleしても配列の内容が変わらないという事を意味しているのであれば、それはありうる事です。

投稿2017/11/01 06:04

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aaaaaachannel

2017/11/01 16:50

配列の中のインデックス番号を指定していたんですね。インデックス番号ではなくて数値で考えて、完全に勘違いしてました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問