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

最近クイズを作る機会ãŒä½•度ã‹ã‚りã¾ã—ã¦ã€ç·æ•°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ã«ä¿®æ­£ã€‚

Facebook Comments