é…列ã‹ã‚‰é‡è¤‡ã›ãšã«å€¤ã‚’å–り出ã™
最近クイズを作る機会ãŒä½•度ã‹ã‚りã¾ã—ã¦ã€ç·æ•°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ã«ä¿®æ£ã€‚
