2011-01-12 11 views
1

AS3のfor eachコンストラクト内の参照によって値を渡すにはどうすればよいですか?基本的に、私はPHPで、次のコードと同等の何かをしたい:AS3での参照による受け渡し

foreach ($array as &$v) { 
    $v = $v + 1; 
} 

これは私が単一のループを通じて収集$arrayのすべての要素を変更することができるようになります。

+1

ActionScriptでは、メソッドに値を渡すだけです。 「パス」は、何も渡していないので、単にアクセスするだけで、ここで使用する正しい単語ではありません。 – JeffryHouser

答えて

1

EDIT:weltraumpiratが正しい。私の元の例では、元のポスターの内容を変更していない可能性があります。

for eachを使用して

更新例:ここではいくつかの更新例です

標準 forループ使用例を更新しました
for each (var s:String in arr) 
{ 
    arr[arr.indexOf(s)] = "<Your value here>"; 
} 

for (var counter:int = 0; counter < arr.length; counter++) 
{ 
    arr[counter] = "<your value here>"; 
} 

オリジナル例[正しくない]:

for each (var s:String in array) 
{ 
    s = <your value here>; 
} 
+0

+1これは元のポスターが後になったものだと思うからです。しかし、彼の話は参考にすると混乱する。 – JeffryHouser

+0

-1このコードはオリジナルのポスターが望むものに近いものを実行しないため、元の配列は変更されませんが、各繰り返しで参照を含むvarに新しい値を設定します。 forループの後に配列をトレースするだけで、すべてが以前と同じになります。 – weltraumpirat

+0

あなたのコードごとにあなたは間違っています。配列内に繰り返し項目がある場合、失敗します。indexOfは、初期オフセットを渡さない限り、配列の最初から見つかった最初のオカレンスをデフォルトで取得します。しかし、そのためにはインデックスが必要です。カウンタを保持することはできますが、a)反復順序は保証されていないため、失敗する可能性があります。b)カウントを保持する必要がある場合は、とにかく通常のfor/whileループを使用する方がよいでしょう。また、あなたのループと別の検索(おそらく線形も)indexOfを使用して、線形検索を行っているので、これは不要な複雑さを問題に追加すると言うでしょう。 –

5

ポインタをAS3には存在しないため、Array.forEを使用する必要がありますアレイ内の各アイテムについて関数を実行ACH法:

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Array.html?filter_coldfusion=9&filter_flex=3&filter_flashplayer=10&filter_air=1.5#forEach%28%29

ビットオフトピックが、(関数の)AS3の値と参照について詳細ActionScript 3.0で

、すべての値はオブジェクトとして格納されるため、すべての引数は参照渡しに渡されます。ただし、Boolean、Number、int、uint、およびStringを含むプリミティブデータ型に属するオブジェクトには、値渡しのように動作させる特殊な演算子があります。

http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f56.html

+0

+1です。しかし、彼の例では、実際にはパラメータを渡していません。ループでそれらにアクセスするだけです。 – JeffryHouser

+0

PHPコードの&は、vが実際に元の配列の値へのポインタであることを示しています。したがって、v = v + 1を代入すると、元の配列が変更されます。これは、メソッドを呼び出して引数を渡すことには関係しません。したがって、文書の抜粋は正しいですが、実際に質問に答えるのに役立ちません。 – weltraumpirat

+0

はい、私は元来の質問を誤解しています。 Array.forEachメソッドは、何らかの方法で探しているものだと思います。 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Array.html?filter_coldfusion=9&filter_flex=3&filter_flashplayer= 10&filter_air = 1.5#forEach%28%29 –

1

あなたは、彼らが道あなたがPHPでそれを行うこれを行うことはできません。 forループごとに値を取得するための参照変数vが生成されますが、v = v + 1に設定すると元の配列は変更されませんが、参照を消去してvに新しい値を設定します。シンプルアレイ用

:1つのループ内のすべての配列値を連想配列については

var array1 : Array = [ "one", "two", "three" ]; 
for (var i : int = 0; i < array1.length; i++) 
{ 
    array1[i] = "number " + array1[i]; 
} 

(それが実際にFlashのオブジェクトの)、のために使用して...で:

var array2 : Object = { one:"one", two:"two", three:"three" }; 
for (var s:String in array2) // s is the string value of the array key 
{ 
    array2[s] = "number " + array2[s]; 
} 

私は第2のものがあなたが探しているものだと思います。

+0

+1の2番目の例です。それは私にとって新しいものです。毎日何か新しいことを学ぶ。 :) –

関連する問題