一定範囲の整数をランダムに取り出す

順番をランダムに決めるために、連続する整数からランダムにユニークな値を取り出すロジックが欲しかったので作ってみた。ビンゴとかにも使えるなぁ。作らなさそうだけど。

自分の要求のみ満たせばいいんで割と手抜き。ルールは、
・連続する正の整数が対象
・取り出した値はユニーク
・もうなければ-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と違って楽でいいな。