読者です 読者をやめる 読者になる 読者になる

IndexOfで特定条件下の2重ループをやや高速に。

この方法は、たとえば試験を受けた人のIdと名前だけが格納された配列と合格基準に逹した人のIdだけが格納された配列があり、そのデータから合格基準に達した人の名前を表示したい場合に有効です。非常にかぎられた条件なので使うことはないかも。
普通ならこのように書きます。studentsはidとnameをもつstudentクラスのインスタンスが格納された配列とし、passersは合格者idの格納された配列とします。

var studentsCnt:uint  = students.length();
var passersCnt:uint   = passers.length();

for(var i:uint=0; i<studentsCnt; i++){
  for(var j:uint=0; j<passersCnt; j++){
    if(students[i].id == passers[j]){
      trace(student[i].name);
    }
  }
}

速度的に嫌なニオイのするコードです。これを次のように書いてみます。

var studentsCnt:uint  = students.length();
var passersCnt:uint   = passers.length();
var passersId:String;

for(var i:uint=0; i<passersCnt; i++){
  passersId += passers[i] + ","; /* 区切り文字を付加 */
}
for(var i:uint=0; i<studentsCnt; i++){
  if(passersId.indexOf(students[i].id) > 0){
    trace(student[i].name);
  }
}

Idをひとつづつ区切って文字列とし、indexOfで判定するわけです。これで意外と高速化できます。ちょっと小賢しいかな。