2011-02-06 4 views
5

La meilleure façon que je pouvais penser est une boucle:Le moyen le plus propre de rechercher un tableau 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; 
    } 
} 

est-il une autre façon de rechercher une chaîne dans un tableau 2D?

+0

Sinon, comment le feriez-vous? –

+0

Cela me semble bon ... – Robin

+0

Êtes-vous capable de trier par ordre alphabétique et exécuter une recherche binaire? –

Répondre

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 pour créer un tableau 2D 1D! – JCOC611

+0

Vous pouvez remplacer le moment par une instruction mod. – tomdemuyt

+2

@tomdemuyt Vrai, cela fonctionne si le tableau est connu pour être rectangulaire. – Neil

2

Vous pouvez le faire:

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

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

Pour trier par ordre alphabétique puis,

Une recherche binaire fonctionne en regardant la valeur moyenne dans le tableau puis voir si la recherche pour le mot clé/numéro est> ou < cette valeur et divisant ainsi le tableau en deux, puis divise le reste en deux et continue jusqu'à ce que la valeur recherchée soit trouvée;

enter image description here

Pour mettre en œuvre une recherche binaire s'il vous plaît lire ici: http://www.timlin.net/csm/cis111/Chapter10.pdf

Diapositives 52-56 sur ...

Cette méthode permet théoriquement de façon exponentielle votre recherche plus rapidement.

+0

Cela fonctionne bien pour un tableau de nombres ou de chaînes, mais pas un tableau de tableaux. –

+0

Sûrement si c'est un tableau de tableaux qui en fait un tableau 3D et non 2D? –

+1

Un tableau 3D est un tableau de tableau de tableau '[[[]]]', il ne s'agit donc que d'un tableau 2D. – JCOC611

Questions connexes