- ベストアンサー
文字の連結
str1~9まで任意の文字列が入ります。 str1=あああ str2=いいい のような感じです。 これをfor文で連結させたいのですがうまく値がはいりません。以下のソースなのですがどのようにすればいいでしょうか? for(var i:Number = 1; i <= n; i++){ var a; a = this["a"] + this["str"+i]; } trace(a); 最終的にaにはあああいいいううう・・・というような文字列を入れる予定です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
作業用の変数 a を for ループの中で定義すると、ループのたびに初期化され、前に入っていた内容が消えてしまいます。 前の a の内容を維持しながら文字列を追加していくには、a を for 文の”外で”定義し、ループに入る前に1度だけ初期化します。 スクリプトの一例です。 (↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください) /**************************************************/ //連結する文字列の総数 var n:Number = 3; //文字列のサンプル var str1:String = "あああ"; var str2:String = "いいい"; var str3:String = "ううう"; //連結処理 var a:String = ""; for( var i:Number = 1 ; i <= n ; i++ ) { a += this[ "str" + i ]; } //動作確認 trace( a ); /**************************************************/ "" は空っぽの文字列を表します。 つまり、変数 a には最初は”文字が1文字もない文字列”が入っています。 a を for 文の外で定義しておくと、ループ内では a が初期化されず、ループ前の内容がそのまま残ります。 あとは for ループ内で a と変数をつなぐ処理をするだけで、1回目のループで a の初期値である空っぽの文字列+ str1 で "あああ" 、2回目のループでは先のループでできた "あああ" に str2 を追加して "あああいいい" ・・・というように、前の文字列を維持しながら次々と文字列を連結していくことができます。 ちなみに、文字列の連結にも数値と同様に” += ”演算子が使えます。 意味は a = a + this[ "str" + i ]; と同じですから、代わりにこのように書くこともできます。
その他の回答 (1)
- DPE
- ベストアンサー率85% (666/776)
#1です。 for ループと [ ] を利用して変数を定義する場合は、型の明示をなしにして this[ "str" + i ] = "0"; とすればエラーにならず、変数も定義されます。 var は、他の階層にある変数( this.str1 のように、実は自分のものだがターゲットパスを記述する場合なども含む)には付けられないことになっています。 [ ] で動的に変数を作る場合は必ず左側にターゲットパスを書かなければならないため、var を付けるとエラーになってしまいます。 しかし、変数の型を明示する” : ”演算子は、var と一緒でなければ使用できません。 つまり、for ループと [ ] で動的に変数を作る場合、型の明示はできないのだと思います。
お礼
お返事ありがとうございます。おかげ様でうまく動作させる事ができました。 for文で以下のように変数を定義する場合なのですが var str1:String = "0"; var str2:String = "0"; ・・・ このような事をfor内で実現するにはどうすれば可能でしょうか? var this[ "str" + i + :String] = 0; のようにしてみたのですがうまく動作しないようです。