配列の要素をシャッフルしたい

配列の中身をランダムに変更する関数を作りたいのですが、分からないので教えてください
配列を1周する中で、ランダムに選ばれた配列の要素と該当する配列の要素を1対1で入れ替えることで、ランダムに配列の要素をシャッフル出来ます

処理イメージ ※クリックで拡大します

umiumiさんの掲示板で、直撃の関数をしろまささんが回答していたので、参考とさせて頂き、ご紹介します。

コード例

DIM list[] = 1,2,3,4,5,6,7,8,9,10

shuffle(list)

For num = 0 TO length(list)-1
	PRINT list[num]
NEXT

//---シャッフル関数
Procedure shuffle(var list[])
 Dim n = length(list)	//配列の要素数
 Dim i, r, tmp
 for i = 0 to n -1
  r = random(n)
  tmp = list[r]		//ランダムに選ばれたr番目の配列の値を取得
  list[r] = list[i]	//配列i番目の値をr番目に入れる
  list[i] = tmp		//入替え完了
 next
Fend
ただし、UWSCのバージョンが4.0以上でないとエラーが出るようなので、注意です

関連情報:

  1. RANDOM
  2. ランダムな文字列をメモ帳に書き出したい


続きは、ログインもしくは、登録してください



このページの先頭へ