2011-02-06 4 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 배열 1D 만드는 법 +1! – JCOC611

+0

while을 mod 문으로 대체 할 수 있습니다. – tomdemuyt

+2

@tomdemuyt 배열이 직사각형 인 것으로 확인되면 True입니다. – Neil

2

이 작업을 수행 할 수 < 값을 곱한 다음 배열을 반으로 나눈 다음 나머지를 다시 반으로 분할하고 검색된 값이 발견 될 때까지 계속합니다. 에 http://www.timlin.net/csm/cis111/Chapter10.pdf

슬라이드 52-56 ...

이 방법은 이론적으로 기하 급수적으로 빠르게 검색한다 :

enter image description here

는 여기를 참조하시기 바랍니다 이진 검색을 구현합니다.

+0

숫자 또는 문자열 배열에는 적합하지만 배열 배열에는 적합하지 않습니다. –

+0

확실히 배열이 3D 배열이면서 2D가 아닌 배열로되어 있다면? –

+1

3D 배열은 배열'[[]]] 배열의 배열입니다. 따라서 2D 배열 일뿐입니다. – JCOC611

관련 문제