配列シャッフル

| | comments(0) | truckbacks(0)

前回に続いて過去のAS2クラスをAS3に書き換えた。
整数を投げたらそれを配列にしてシャッフルして返すクラス。

理解が浅く、なぜextends MovieClipしないといけないのか分からない...。デバッガに怒られまくりながら、こんな感じになりました。有識者にご指摘頂ける日を待ち望みつつとりあえず晒しとく。

package com.nrd_studio
{
	import flash.display.MovieClip;
	
	public class OpArray extends MovieClip
	{
		private static var _max:uint;
		private static var _a:Array = [];
	
		public static function shuffle(n:uint)
		{
			_max = n;
			_a = makeArray();
			return xShuffleArray(_a);
		}
		
		private static function makeArray():Array
		{
			for( var i:uint = 0; i < _max; i++)
			{
				_a.push( i + 1);
			}
			return _a;
		}
		
		private static function xShuffleArray(arr:Array):Array
		{
			var i:uint = arr.length;
			while(i--)
			{
				var j:uint = Math.floor(Math.random() * (i + 1));
				var t:uint = arr[i];
				arr[i] = arr[j];
				arr[j] = t;
			}
			_a = [];
			return arr;
		}
	}
}

オブジェクトをnew、とかしたりしなくてもサクっと結果が返せるので楽チンかと。

var a:Array = OpArray.shuffle(20);
trace(a);
//出力:3,16,14,19,5,8,2,7,6,20,9,15,10,4,18,11,17,12,1,13


追記。

最後に return arr; する前に _a = []; しとかないと、
連続して使うときにその前で使用した際の配列が残ってしまってた(恥
Check

トラックバック(0)

このブログ記事を参照しているブログ一覧: 配列シャッフル

このブログ記事に対するトラックバックURL: http://www.nrd-studio.com/mt/mt-tb.cgi/137

コメントする

このブログ記事について

このページは、Biz_Rが2008年8月27日 12:59に書いたブログ記事です。

ひとつ前のブログ記事は「任意秒数タイムラインをストップ」です。

次のブログ記事は「Candles around Shuku-River」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。