« 「新しくなったイベント処理」を追加しました | メイン | 「rootとstage」をリライトしました »

3.1配列の操作(6)配列を検索する

■配列を検索する indexOf()、lastIndexOf()
配列の値を検索したい場合には、すべての値を総当たりでチェックしなければならない場合もありますが、単純に値が含まれているかどうかがわかればよい場合があります。そのような場合にはindexOf()、lastIndexOf()のメソッドが便利です。
indexOf()は指定した検索開始位置から後ろを検索して最初に見つかった位置を返します。lastIndexOf()は指定した検索開始位置から手前に検索して最後に見つかった位置を返します。検索開始位置を省略するとindexOf()は最初から探し、lastIndexOf()は最後から探します。どちらのメソッドも検索の結果見つからなかった場合には-1が返ってきます。
なお、開始位置をマイナスで指定すると後ろから位置を数えます。-1が最後の位置になります。

例:
var vlist:Array = new Array("a","x","b","a","x","b","x");
trace(vlist.indexOf("x",0));//出力:1
trace(vlist.indexOf("z",0));//出力:-1
trace(vlist.lastIndexOf("x",-1));//出力:6
//開始位置を省略
trace(vlist.indexOf("b"));//出力:2
trace(vlist.lastIndexOf("b"));//出力:5
//途中の位置から検索
trace(vlist.indexOf("x",2));//出力:4
trace(vlist.lastIndexOf("b",-3));//出力:2

次のaddNo()はnoListに同じ番号が入っていなければ番号を追加登録し、新しい配列を返す関数です。例ではnoListを引数で渡し、結果をnoListに入れているのでnoListが更新されますが、結果を別の変数に入れれば元のnoListの値は変化しません。
[:sample:] indexOf.fla
例:ユニークな値だけ追加する
function addNo(tmplist:Array, no:int):Array {
	var newlist:Array = tmplist.slice();
	var index:int = newlist.indexOf(no);
	if (index<0) {
		newlist.push(no);
	}
	return newlist;
}

var noList:Array = new Array(1,2,3);
noList = addNo(noList, 50);
noList = addNo(noList, 60);
noList = addNo(noList, 50);
noList = addNo(noList, 2);
trace(noList);
//出力:1,2,3,50,60

About

2007年6月29日 10:26に投稿されたエントリーのページです。

ひとつ前の投稿は「「新しくなったイベント処理」を追加しました」です。

次の投稿は「「rootとstage」をリライトしました」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。