feb19.jp blog - life is creative!

配列をシャッフルする

ブックマークに追加する tags:    

配列をシャッフルする

基本的なアルゴリズムですが、静的クラスで配列シャッフル関数を作ったのでご紹介。

ちなみにActionScript2.0用のコードですが、package宣言や型指定をすれば下記コードもActionScript3.0で使用できます。

コード

class ExArray {
	static public function shuffle(arr:Array){
		var l = arr.length;
		var newArr = arr;
		while(l){
			var m = Math.floor(Math.random()*l);
			var n = newArr[--l];
			newArr[l] = newArr[m];
			newArr[m] = n;
		}
		return newArr;
	}
}

使用方法

  1. 上記ソースコードをテキストエディタにコピペし、「ExArray.as」という名前で保存します。
  2. 実行したいflaファイルと同階層、またはクラスパスを通したディレクトリにこのファイルを設置します。
  3. 下記のようなコードをflaファイル上で記述するとシャッフルが実行されます。
var a:Array = new Array();
a = [1,2,3,4,5,6,7,8];
var aa = ExArray.shuffle(a);
trace(aa);	//出力例: 5,6,3,4,7,8,1,2

実行方法はすごく単純です。ExArray.shuffle(対象の配列);と実行すれば、シャッフルされた配列が戻ってくるという仕組みです。

ここで使われている静的クラス(static)は、ActionScriptのビルトインクラス、Mathクラスのように、var m:Math = new Math();とコンストラクタでいちいちインスタンスを作らなくてもOKなのです。staticで宣言しておけばそのメソッドをさくっと利用できるため、軽いアルゴリズムの利用なんかにおすすめです。もちろんそれ以外でも活用できますが。

ちなみにArrayクラスをextendsキーワードで継承したクラスを作れば、コンストラクタでインスタンスを作成し、それを.shuffle()するといったことができます。

また、prototype拡張や、ASSetPropFlagsなどでArrayクラス自体を拡張することができますが、こちらはおすすめできません。なぜならこちらはArrayを拡張するので、Array.shuffle();といったことが可能になるわけですが、こうしてしまうと独自にユーザーが拡張しているということが傍目で分かりづらく、コードの部分部分からでは非常に読みにくくなっています。そのためコードの再利用性が落ち、他人も読みにくくなってしまいます。Arrayなど、ビルトインクラスを拡張するのはあまりおすすめできません。

2007年08月16日08:21

Webデザインブログ

「配列をシャッフルする」の関連エントリー

 iTunes Store(Japan)

コメントを投稿

トラックバック

このエントリーのトラックバックURL:
http://feb19.jp/mt/mt-tb.cgi/84

この一覧は、次のエントリーを参照しています: 配列をシャッフルする:

» プロトタイプベースのクラス拡張 送信元 feb19.jp blog
ActionScript1.0と2.0を見直したい。1.0と2.0は... [詳しくはこちら]

» 2010年サッカーW杯 in 南アフリカの組み合わせ抽選シミュレータ、作ってみました。 送信元 井上淳のまるサンカク企画
前回準優勝のフランスが、例のハンド問題でシード落ちするなど、 話題になった2010年W杯のポッド分けが決まったみたいですね。 それに合わせて、自動的に組み... [詳しくはこちら]

Navigation

古:新iMac発売
新:Adobe Flash CS3 詳細! ActionScript 3.0 入門ノート
トップページ

Recently Entries
Mac でファイルの関連付けを変える(Mac で AIR アプリがアップデート出来ないを解決する方法)
ファイルを右クリックして「情報を見る」を選び、表示されたウィンドウの...
Mac OS X 10.6 Snow Leopard から入ってるフォント「Menlo」がコーディング作業にいい感じ
Xcode でコード書いているとき、Eclipse でコード書くより...
AIR で JSON 形式ファイルの入出力
AIR 祭り開催中。今回はファイル入出力。AS3 で扱っている Ob...
Adobe CS5 ティザーサイトオープン
カウントダウンが始まっています。いよいよ CS5 ですね。globa...
AIR でファイルがドラッグアンドドロップされたことを NativeDragEvent で検知する
最近また AIR が楽しい気がして触っているのですが、 Google...
iPhone アプリ "iBeat - BPM Counter" を発売しました & iPhone インタラクションデザインについて
BPM 計測アプリです。既に似たようなアプリはいくつか発売されている...
AS3 の演算子 ||= について
AS3 だけでつかえるものではないのですが、AS3 での動作を確認し...
iPhone SDK 「カテゴリ」について+NSString の空白文字を除去する
Objective-C では、高位のフレームワークで、低位のフレーム...
Flash CS4 で Flex SDK (mx パッケージ、クラス) を使う
Flex 用のライブラリとかを見ると mx パッケージとか使われてい...
Flash CS5 を予習 ~Text Layout Framework (TLF) 編~
Text Layout Framework (TLF) を使って、F...