今回も、超ミニミニTIPSです。
これ、どっかで書いたことあったっけな?ってくらいメジ
ャーな質問です。
配列の要素に重複しない要素をセットしたい。しかもラン
ダムに。
みたいなやつで、質問箱とかプログラミング質問系のとこ
ではめちゃくちゃ有名な質問です。
やり方の概要としては
1 乱数を発生させる
2 配列に該当の数字がない? あるならやり直し
3 格納する
4 次の要素へ
で、できますが。
あっしは、「配列を作っておいて並び替えちゃえ」作戦を
推奨します。(他の人も言ってるけど、乱数は偏るので)
もちろんこれ以外の方法もあるかと思いますが、あくまで
参考まで。(もっとスッキリ書けるかもです)
要するに、こうします
for (int i = 0; i < Index.Length; i++){
解説
//配列の要素の分だけ繰り返す
for (int i = 0; i < Index.Length; i++){
//1 tempに要素を移し替えて
int temp = Index[i];
//要素の個数を最大値とした乱数を発生
int rIndex = Random.Range(0,Index.Length);
//2 乱数で指定した要素を移動させて
Index[i] = Index[rIndex];
//3 そこに保存してあった要素を載せ替える
Index[rIndex] = temp;
}
最初の処理だけ見ておくと
1 Index[0]→ temp 値0がtempに行きます
乱数が1だとすると、
2 index[0] =index[1] 値1がindex[0]に移動
3 index[1]=temp index[1]に値0が移動
この場合は要素0と要素1のシャッフルになると
いうわけです。(10234・・・になります)
今日も小ネタですいません。しばらくこんな感じです。
それではよきプログラミングライフを!
またね。