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で判定するわけです。これで意外と高速化できます。ちょっと小賢しいかな。