forループ
- 2010 年 6月 14 日
小ネタが続きます。
forステートメントは、指定回数のループに用いることが通常ですが、構文的には、
for( 初期値; 終了する条件; 次の値 ) |
です。なので例えば以下みたいに使うことも出来る。
var master:Vector.<String> = Vector.<String>([ "0", "1", "2", "1", "21", "2", "2" ]); var record:Vector.<String> = Vector.<String>([]); function getValue( str:String ):String{ var value:String; for each( var target:String in record ){ if( target == str ){ value = target; break; } } return value; } for( var i:uint=0; i<master.length; i++ ){ var n:String = master[i]; for( n; getValue(n); n+="+" ); record.push( n ); } trace( "master:" + master ); trace( "record:" + record ); |
上記のソースでは、ある文字列の配列をループして、同じ名前があったら、文字列の最後に「+」を付与しています。
for文のポイントはここ。
for( n; getValue(n); n+="+" ); |
初期値nには、配列から取得した文字列になります。
終了条件は、getValueで得ます。getValueはnの文字列が既に登録されていたらその文字列を、そうでなければ空を返す。
次の値はnの最後に「+」を付与したもの。
このループを通過後、nにはまだ登録されていない文字列が入っています。
結果は以下になります。
master:0,1,2,1,21,2,2
record:0,1,2,1+,21,2+,2++
これをどんな時に使うかというと、たとえばユーザが変更できるxmlから値を取得して使う時、その値は同じものがあってはならない場合なんかに有効。xmlで外部編集を可能にした場合、意図しない値をユーザが入力してしまう可能性があります。転ばぬ先の杖的にこういった構文を入れておくとよいかもしれないです。