molto semplice, JavaScript non supporta vere e proprie matrici bidimensionali, ma tramite matrici di matrici ed un uso intelligente della sort (non la Math ... ) puoi risolvereOriginariamente inviato da Calaf1966
Se poi mi voleste spiegare perchè sembra impossibile reperire tale informazione sulle varie guide Javascript sparse in Internet, mi illuminerete. Ho già perso delle ore nella invana ricerca.
Grazie.
la sort è un metodo di Array che ti permette di utilizzare una callback, in questa callback riceverai i valori a e b che in questo caso saranno le varie righe.codice:function BiDimensionalMatrix(m, n){ for(var matrix = new Array(m), i = 0; i < m; i++) matrix[i] = new Array(n); return matrix; }; var m32 = BiDimensionalMatrix(3, 2), row = 0, col = 0; m32[row][col++] = 1; m32[row][col++] = 2; // incremento una riga row++ // resetto la colonna col = 0; m32[row][col++] = 3; m32[row][col++] = 4; // ... come prima ... row++; col = 0; m32[row][col++] = 5; m32[row][col++] = 6; alert(m32.join("\n")); /* 1,2 3,4 5,6 */
Immagina di voler spostare le righe per ordine decrescente:
Non avendo supporto effettivo delle matrici bidimensionali il sorting per colonna è comunque fattibile ma più macchinoso ... spero che almeno con questi esempi tu abbia le basi per provare un pò di soluzionicodice:function getTotalRowSize(matrix){ for(var i = 0, total = 0; i < matrix.length; i++) total += matrix[i]; return total; }; m32.sort(function(a,b){ var aSize = getTotalRowSize(a), bSize = getTotalRowSize(b); return aSize < bSize ? 1 : aSize > bSize ? -1 : 0; }); alert(m32.join("\n")); /* 5,6 3,4 1,2 */![]()


Rispondi quotando