2011-02-06 3 views
5

最も簡単な方法は、forループです:2D配列を検索する最もクリーンな方法は?私は考えることができ

var arr=[["hey","oh"],["scar","tissue"],["other","side"]]; 
var query="scar"; 
for(var z=0;z<arr.length;z++){ 
    if(arr[z].indexOf(query) !== -1){ 
     //Found 
     break; 
    } 
} 

2D配列内の文字列を検索する他の方法はありますか?

+0

他にどのようにしますか? –

+0

私によく見えます... – Robin

+0

アルファベット順にソートしてバイナリ検索を実行できますか? –

答えて

11
var arr = [["hey","oh"],["scar","tissue"],["other","side"]]; 
var flat = [].concat.apply([], arr); 
var col = flat.indexOf(query); 
var row = -1; 
if (col != -1) // found, now need to extract the row 
    while (arr[++row].length <= col) // not this row 
    col -= arr[row].length; // so adjust and try again 
+2

2Dアレイの作り方1 +1! – JCOC611

+0

whileをmodステートメントに置き換えることができます。 – tomdemuyt

+2

@tomdemuyt Trueは、配列が長方形であることがわかっている場合に機能します。 – Neil

2

あなたはこれを行うことができます:バイナリ検索キーワード/番号検索であれば見て、配列内の中間の値を調べることで動作しますが、その後、アルファベット順に並べ替えるには

var arr=[["hey","oh"],["scar","tissue"],["other","side"]]; 

arr.sort(); 
arr.join(); 

を>か<の値を計算し、配列を半分に分割し、残りの半分を再び分割し、検索された値が見つかるまで続けます。

enter image description here

こちらをお読みくださいバイナリ検索を実装するには:このメソッド

...に http://www.timlin.net/csm/cis111/Chapter10.pdf

をスライド52-56理論的には指数関数的に速く検索します。

+0

これは、配列の配列ではなく、数値や文字列の配列に対してはうまく機能します。 –

+0

確かに、2D配列ではなく3D配列にする配列の配列ですか? –

+1

3D配列は、配列[[[]]]の配列の配列なので、2Dの配列に過ぎません。 – JCOC611

関連する問題