質問: arc4random()%UInt32(z) b.addObject(a[Int(c)]) a.removeObject(Int(c)) z -= 1 } ``` ### 補足情報(言語/FW/ツール等のバージョンなど) swift2を使っています。
回答: 二重発行しないと言うことで乱数では無いようですね。 発行済の乱数をテーブルに保存して、発行時に重複発行か確認します。もし重複していたら再度発行します。 もしくは、トランプをシャッフルした時に上からめくっていくと一見ランダムに見えると思いますが、それと同じことを行います。あらかじめ発行したい数値をランダムに並べ替え、その配列を上から使っていくなどが良いです。 ランダムに並べる方法は、例えばトランプに乱数を割り当てます。その後乱数の小さい順にトランプを並べ替えます。この時使う乱数は発行したいトランプの数よりも大幅に大きい範囲を使うと良いです。並べ替えたトランプを順番に発行すると一見ランダムに見えるはずです。 追記: swift2ではなくて申し訳ありませんが、JavaScriptで後半の内容を実装してみました。 0から19の乱数を発生させたところ以下の順で発生させることができました。 5,7,17,12,8,9,1,3,10,6,14,16,18,15,0,11,2,4,13,19 ``` var ary = []; // まずは乱数と配列添え字を配列に順番に入れていく for( var i=0;i<20;i++) { var rand = Math.floor( Math.random() * 10000 ) ; ary[i] = {'rand':rand,'value':i}; } // 配列を乱数でソートする ary.sort(function(a,b){ return ( a.rand < b.rand ? 1 : -1); }); // 配列の先頭から添え字を取り出すことで重複しない数字を取得する。 var resutl=""; for( var i=0;i<20;i++) { resutl += ary[i].value +','; } ```