2011-02-06 25 views
5

La manera más fácil de lo que podía pensar es un bucle for:¿La manera más limpia de buscar una matriz 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; 
    } 
} 

¿Hay alguna otra manera de buscar una cadena en una matriz 2D?

+0

¿De qué otro modo lo harías? –

+0

Me parece bien ... – Robin

+0

¿Puede ordenar alfabéticamente y ejecutar una búsqueda binaria? –

Respuesta

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

+1 de cómo hacer una matriz 2D 1D! – JCOC611

+0

Puede reemplazar el tiempo con una declaración de mod. – tomdemuyt

+2

@tomdemuyt Cierto, eso funciona si se sabe que la matriz es rectangular. – Neil

2

usted puede hacer esto:

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

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

ordenar alfabéticamente a continuación,

Una búsqueda binaria trabaja mirando el valor medio de la matriz luego ver si el buscaron palabra clave/número es> o < que valoran y, por lo tanto, dividen la matriz por la mitad, luego divide el resto por la mitad otra vez y continúa hasta encontrar el valor buscado;

enter image description here

Para poner en práctica una búsqueda binaria favor leer aquí: http://www.timlin.net/csm/cis111/Chapter10.pdf

Diapositivas 52-56 en ...

Este método hace que teóricamente su búsqueda exponencialmente más rápido.

+0

Eso funciona bien para una matriz de números o cadenas, pero no una matriz de matrices. –

+0

Seguramente si se trata de una matriz de matrices que lo convierte en una matriz en 3D y no en 2D? –

+1

Una matriz 3D es una matriz de matriz de la matriz '[[[]]]', por lo que es solo una 2D. – JCOC611

Cuestiones relacionadas