最も一般的に使用されるトラバーサル方法は for ステートメントです (再帰メソッドや while メソッドもあります)。配列を反復処理するときは、通常次のことを行います:
これは最も一般的に使用されるトラバーサル方法、つまり前方トラバーサルです。配列内の最初の項目から最後の項目まで進みます。
では、なぜ今日のドラマでも逆順横断について言及しているのでしょうか?
ここで、小さなドラマで書かれたコンポーネントの中で最も一般的に使用されるモジュールの 1 つであるイベントについて触れなければなりません。カスタム イベント モデルの作成、イベントの監視とトリガーの処理、最も単純なパブリッシュおよびサブスクライブ (パブリッシュ/サブスクライブ) モードに使用されます。最近、メモリオーバーフローの危険性が潜んでいることが判明したため、独自にアンバインドメソッドを追加する必要がある。
同じイベント名のコールバック関数は同じ配列に配置されているため、バインドを解除するには、配列内で対応するコールバック関数を見つけて (同じコールバック関数が複数回バインドされている可能性があります)、それを削除するだけで済みます。
これは非常に単純な要件であるため、次のようなコードを記述するのが自然です:
通常のコードはありますが、最終的な出力結果は [1, 2, 2, 1, 1, 2] です。明らかに、実行結果は期待どおりではありません。
何が問題ですか?
慎重に分析した結果、配列内の後続の各項目が 1 つずつ進むため、削除操作が実行された後、照合が成功するたびに、次にチェックされる項目がスキップされることが問題であることがわかりました。 。
問題を発見し、コードを変更し、削除操作を実行した後にシーケンスインデックスインデックス (i) を調整しました。
問題は解決しましたが、シーケンスのインデックスを変更するのは for ループのからかいであるとまだ感じています。それから私はひらめきがあり、バンバンバンと次のコードを入力しました:
走査プロセスは変更されていません。唯一の変更点は、走査の順序が変更されたことです。ちなみに、変数の合計が 1 つ減りました。
今日書いたことは非常にばかげていることは認めますが、この例を通して、今後コードを記述するときに、配列自体の変更 (追加と削除) が含まれる場合は、次のように注意してください。逆走は、安全に走破する方法の比較です。
コーディングメモは、後で自分で笑えるように残しておいてください!
転載する場合は出典を明記してください:http://bh-lay.com/blog/148c07761fa