é…列ã‹ã‚‰é‡è¤‡ã›ãšã«å€¤ã‚’å–り出ã™

最近クイズを作る機会ãŒä½•度ã‹ã‚りã¾ã—ã¦ã€ç·æ•°20å•ã‹ã‚‰7å•ã‚’é‡è¤‡ã—ãªã„ã‚ˆã†æŠœã出ã—ã¦é †ç•ªã«è¡¨ç¤ºã—ã¦ã„ãã¨ã„ã†ã‚ˆã†ãªã“ã¨ã‚’ã—ã¾ã—ãŸã€‚ãã®æ™‚ã«ä½œã£ãŸã‚¯ãƒ©ã‚¹ã§ã™ã€‚

é…列ã‹ã‚‰é‡è¤‡ã›ãšã«n個å–り出ã—ã¦æ–°ã—ã„é…列を返ã™RandomExtractクラス

package
{
	public class RandomExtract
	{
		/**
		 * コンストラクタ
		 *
		 * @access public
		 * @param
		 * @return void
		 */
		public function RandomExtract():void
		{
		}

		/**
		 * ランダムã«é…列ã®å€¤ã‚’å–り出ã™
		 *
		 * @access public
		 * @param array å…ƒã«ãªã‚‹é…列
		 * @param num å–り出ã™é…列ã®å€‹æ•°
		 * @return Array
		 */
		public static function random(array, num):Array
		{
			var a:Array = array;
			var t:Object = {};
			var r:Array = [];
			var l:int = a.length;
			var n:int = num < l ? num : l;
			while (n-- > 0) {
				//é…åˆ—ã®æ•°ã‹ã‚‰ãƒ©ãƒ³ãƒ€ãƒ ãªå€¤ã‚’作æˆ
				var i = Math.random() * l | 0;
				r[n] = t[i] || a[i];
				//  t[i]ãŒundefinedã«ãªã‚‰ãªã„処ç†
				--l;
				t[i] = t[l] || a[l];
			}
			return r;
		}
	}
}

例ãˆã°10個ã®é…列ã‹ã‚‰3個ã®å€¤ã‚’å–り出ã—ãŸã„時ã¯ä»¥ä¸‹ã®ã‚ˆã†ã«è¨˜è¿°ã—ã¾ã™ã€‚

import RandomExtract;

var arr:Array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
var num:int = 3;

var newArr:Array = RandomExtract.random(_arr, _num);
trace(newArr + "ãŒå–り出ã•れるんã ãœ");

å‡ºåŠ›çµæžœã¯ã“ã‚“ãªæ„Ÿã˜ã§ã™ã€‚

2,1,6ãŒå–り出ã•れるんã ãœ

å‚考サイトãŒã‚ã£ã¦ãã“ã®ã‚³ãƒ¼ãƒ‰ã‚’自分ã«åˆ†ã‹ã‚Šã‚„ã™ã„よã†ã«æ›¸ãæ›ãˆãŸã ã‘ãªã®ã§ã™ãŒã€ã©ã“ã ã£ãŸã‹åˆ†ã‹ã‚‰ãªããªã£ã¦ã—ã¾ã„ã¾ã—ãŸã€‚見ã¤ã‘ãŸã‚‰è¿½è¨˜ã—ã¾ã™ã€‚

[9/21 追記]
ムダã«RandomExtractクラスをインスタンス化ã—ã¦ã„ãŸã®ã§randomメソッドをstaticã«ä¿®æ­£ã€‚

1ã¤ã®é…列ã‹ã‚‰1ã¤ãšã¤ãšã‚ŒãŸ2次元é…列を作る

1ã¤ã®é…列ã‹ã‚‰è¦ç´ ã‚’1ã¤ãšã¤ãšã‚‰ã—ãŸå¤šæ¬¡å…ƒé…列ã®ä½œã‚Šæ–¹ã€‚

var _array:Array = [1, 2, 3, 4];
var _allArray:Array = new Array();
var _length:int = _array.length;

for (var i:int = 0; i < _length; i++ ) {
	var a:Array = new Array();
	_allArray[i] = a;
	for (var j:int = 0; j < _length; j++ ) {
		a[j] = _array[j];
	};
	if (i != 0) {
		for (var k:int = 0; k < i; k++ ) {
			var n:Number = _allArray[i].pop();
			_allArray[i].unshift(n);
		}
	}
}

å‡ºåŠ›çµæžœã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ï¼ˆè¦‹é›£ã„ã®ã§æ”¹è¡Œã—ã¦ã¾ã™ï¼‰ã€‚

1,2,3,4,
4,1,2,3,
3,4,1,2,
2,3,4,1

é…列を1ã¤ãšã¤2次元é…列ã«è¿½åŠ ã—ã¦ã€pop()ã§é…åˆ—ã®æœ«å°¾ã‚’削除ã€unshift()ã§å…ˆé ­ã«è¿½åŠ ã€‚1個目ã¯ãã®ã¾ã¾ã€2個目ã ã£ãŸã‚‰1回ã€3個目ã ã£ãŸã‚‰2回削除&追加を繰り返ã™ã€‚
出ç¾ã®é †ç•ªã‚’変ãˆãŸã„時ã¨ã‹ã«ä½¿ãˆã‚‹ã¨æƒ³ã£ãŸã‚“ã ã‘ã©ã€ã‚‚ã£ã¨ã„ã„やり方ãŒã‚りãã†ã€‚ãã‚‚ãã‚‚ã“ã‚“ãªã“ã¨ã‚„ã‚‹æ„味ãªã„ã‹ã‚‚。