2012-04-19 13 views
7

¿Cómo obtener las dimensiones dadas a una matriz multidimensional?
Editar: podría ser de 1, 2 o 3 dimensiones, pero cada subarreglo tiene la misma longitud.Obtener el tamaño de las dimensiones en el conjunto

es decir, para

var a = [[1,1,1], [1,1,1]] 

habría [2,3]

+3

[¿Qué has probado?] (http://mattgemmell.com/2008/12/08/what-have-you-trie d /) – j08691

+0

¿qué son las listas secundarias de diferentes tamaños? –

+0

Hasta ahora, esta es la mejor respuesta que he encontrado: http://stackoverflow.com/a/13814933/975097 –

Respuesta

1
var dim = [ 
    a.length, 
    a[0].length 
]; 

Esto debería funcionar, dado que cada matriz sub es la misma longitud, sin embargo, si eso no es el caso, podría querer hacer algo como:

function findDim(a){ 
    var mainLen = 0; 
    var subLen = 0; 

    mainLen = a.length; 

    for(var i=0; i < mainLen; i++){ 
     var len = a[i].length; 
     subLen = (len > subLen ? len : subLen); 
    } 

    return [mainLen, subLen]; 
}; 
10
var dimensions = [ arr.length, arr[0].length ]; 

Esto funciona dado que la longitud de las matrices internas nunca cambia.

+0

'" ["+ arr.length +", "+ arr [0] .length +"] "' :) – ajax333221

0
var a = [[1,1,1], [1,1,1]]; 
var size=[]; 
while(s=a.pop) size.push(s.length); 

O si usted quiere tener la longitud interior a:

var a = [[1,1,1], [1,1,1]]; 
for(i in a) a[i]=a[i].length; 

Editar: pido perdón, yo no estaba en el tema. El siguiente código calcula la máxima fila y columna para una matriz bidimensional.

var innerSize = 0, i=0, l=a.length, l2; 
for(;i<l;i++) if(innerSize<(l2=a[i].length)) innerSize = l2 
[l, innerSize] 

Puede cambiar el <-> si desea que el tamaño mínimo.

6

Teniendo en cuenta que las listas de sub pueden tener diferente tamaño, obtener el tamaño mínimo o dependiendo de la necesidad que sea máximo

function size(ar){ 
    var row_count = ar.length; 
    var row_sizes = [] 
    for(var i=0;i<row_count;i++){ 
     row_sizes.push(ar[i].length) 
    } 
    return [row_count, Math.min.apply(null, row_sizes)] 
} 
size([[1, 1, 1], [1, 1, 1]]) 

Salida:

[2, 3] 
+0

¿Funcionaría esto para matrices de cualquier dimensión o solo para matrices bidimensionales? –

+1

@AndersonGreen es sólo para dos dimensiones, pero una llamada recursiva debería hacer que funcione para N dimesnions –

1

Esto funciona para cualquier dimensión (suponiendo que cada sub array tiene la misma longitud):

function getDim(a) { 
    var dim = []; 
    for (;;) { 
     dim.push(a.length); 

     if (Array.isArray(a[0])) { 
      a = a[0]; 
     } else { 
      break; 
     } 
    } 
    return dim; 
} 
Cuestiones relacionadas