一定範囲の整数をランダムに取り出す
順番をランダムに決めるために、連続する整数からランダムにユニークな値を取り出すロジックが欲しかったので作ってみた。ビンゴとかにも使えるなぁ。作らなさそうだけど。
自分の要求のみ満たせばいいんで割と手抜き。ルールは、
・連続する正の整数が対象
・取り出した値はユニーク
・もうなければ-1が返る
とりあえず、一旦Collectionにたたきこんでから、ランダムに抽出してCollectionから消すように実装してみたけど、こういうのって定番のロジックってあるんかな?
コメントもないですが、短いのでそのまま載せてみます。
public class MyRandom { private var remainingNum:int; private var remainingValues:ArrayCollection; public function MyRandom(lower:int, upper:int) { remainingNum = upper - lower + 1; remainingValues = new ArrayCollection(); for (var i:int = lower; i <= upper; i++) { remainingValues.addItem(i); } } public function getRandomBoundedInt():int { if (remainingNum <= 0) { return -1; } var index:int = int(Math.random() * remainingNum--); var randomInt:int = remainingValues.getItemAt(index) as int; remainingValues.removeItemAt(index); return randomInt; } }
気づき
・Collectionにintがそのまま入るのか。Javaと違って楽でいいな。