- ベストアンサー
多重配列の検索方法
- 多重配列の検索方法について教えてください。配列内の要素が10個あり、重複しない配列があります。150に一番近い値を検索する方法を教えてください。
- ループを使用せずに一発で150に一番近い値を検索する方法はありますか?
- 配列内の要素が10個あり、重複しない配列があります。150に一番近い値を検索する効率的な方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
基本的には,「降参!」です~。 つまり「完全なループなし」の検索方法は考え付けませんでした。 しかし, 検索(走査)用データの下準備にループを使用するだけで 検索(走査)自体にはループを使用しない方法であれば考え付きました。 一応,その半分降参状態の方法例を書きます↓。 //----------------------------------------- //配列「_array」を作成 var _array:Array = new Array(); //変数「img」に適当なダミー値を入れておく var img = "dummy"; _array.push({ data:img,_speed:0}); _array.push({ data:img,_speed:31}); _array.push({ data:img,_speed:62}); _array.push({ data:img,_speed:93}); _array.push({ data:img,_speed:124}); _array.push({ data:img,_speed:155}); _array.push({ data:img,_speed:186}); _array.push({ data:img,_speed:217}); _array.push({ data:img,_speed:248}); _array.push({ data:img,_speed:279}); _array.push({ data:img,_speed:309}); _array.push({ data:img,_speed:338}); _array.push({ data:img,_speed:367}); //走査用のキー「_scan」を下準備 (※ココにループ!) for (var i:int = 0; i < _array.length; i++) { _array[i]._scan = Math.abs(_array[i]._speed - 150); } //「_scan」をキーにして数値順でソート _array.sortOn("_scan", Array.NUMERIC); //1つ目の「_speed」キーの値を出力窓に出力 trace(_array[0]._speed);//→「155」 //----------------------------------------- 検索(走査)自体にループ文は使用していないでしょう? (もっとも,ActionScript コンパイル後のマシン語に近い言語では,sortOn 内部でループを実行させているのかもしれませんが。) このあと, _array.sortOn("_speed", Array.NUMERIC); を実行すれば 配列の中身は元通りの順に戻ります。
その他の回答 (1)
- Picosoft
- ベストアンサー率70% (274/391)
配列の中身がソートされていることが保証されているなら、二分探索を使うのが一番早いでしょう。
お礼
この検索方法は知らなかったので、大変参考になりました。。 ありがとうございました。
お礼
大変参考になりました。ありがとうございます