2017-09-04 4 views
0

以下のシャッフル機能を面接の質問で同僚が調べて、カードのデッキをシャッフルします。元のインデックス「from」のカードは削除されて失われているようです。スワップされる代わりに、削除されています。何か不足していますか?シャッフル機能が即座にカードを交換するのではなく、カードを取り除くようです。

func shuffle() { 
     var from = 0 
     var to = 0 
     for _ in cards { 
      from = Int(arc4random_uniform(UInt32(cards.count))) 
      to = Int(arc4random_uniform(UInt32(cards.count))) 
      cards.insert(cards.remove(at: from), at: to) 
     } 
     print("\nShuffled deck\n") 
    } 
+0

'cards.insert'を呼び出すとどう思いますか? – rmaddy

答えて

0

Arrayremove(at:)機能だけ配列から項目を削除しません。削除された要素も返します。上記のコードは、削除された要素をすぐにinsert(at:)に渡します。これにより、削除された要素が別の場所に挿入されます。

+0

はい。したがって、removeは、インデックス "from"の要素を返し、それをインデックス "to"に挿入します。インデックス "to"にすでに存在していた要素はどうなりますか? –

+0

'insert(at:)'メソッドは、挿入ポイントの右にあるものすべてを1つ右にシフトします。 –

+0

gotcha!ありがとう! –

関連する問題