38 votes

Convertir un tableau simple en tableau bidimensionnel (matrice)

Imaginez que j'ai un tableau :

A = Array(1, 2, 3, 4, 5, 6, 7, 8, 9);

Et je veux qu'il soit converti en tableau à 2 dimensions (matrice de N x M), par exemple comme ceci :

A = Array(Array(1, 2, 3), Array(4, 5, 6), Array(7, 8, 9));

Notez que les lignes et les colonnes de la matrice sont modifiables.

2voto

p8ul Points 134

C'est un moyen simple de convertir un tableau en un tableau à deux dimensions.

function twoDarray(arr, totalPerArray) {
  let i = 0;
  let twoDimension = []; // Store the generated two D array
  let tempArr = [...arr]; // Avoid modifying original array

  while (i < arr.length) {
    let subArray = []; // Store 2D subArray

    for (var j = 0; j < totalPerArray; j++) {
      if (tempArr.length) subArray.push(tempArr.shift());
    }

    twoDimension[twoDimension.length] = subArray;
    i += totalPerArray;
  }
  return twoDimension;
}
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];

twoDarray(arr, 3); // [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]

2voto

MarvinLabs Points 13401

Il suffit d'utiliser deux pour les boucles :

var rowNum = 3;
var colNum = 3;
var k = 0;
var dest = new Array(rowNum);

for (i=0; i<rowNum; ++i) {
  var tmp = new Array(colNum);
  for (j=0; j<colNum; ++j) {
    tmp[j] = src[k];
    k++;
  }
  dest[i] = tmp;
}

2voto

cwallenpoole Points 34940
function matrixify( source, count )
{
    var matrixified = [];
    var tmp;
    // iterate through the source array
    for( var i = 0; i < source.length; i++ )
    {
        // use modulous to make sure you have the correct length.
        if( i % count == 0 )
        {
            // if tmp exists, push it to the return array
            if( tmp && tmp.length ) matrixified.push(tmp);
            // reset the temporary array
            tmp = [];
        }
        // add the current source value to the temp array.
        tmp.push(source[i])
    }
    // return the result
    return matrixified;
}

Si vous voulez réellement remplacer les valeurs internes d'un tableau, je pense que vous pouvez appeler ce qui suit :

source.splice(0, source.length, matrixify(source,3));

1voto

Sagar Mishra Points 11
function changeDimension(arr, size) {  
  var arrLen = arr.length;
  var newArr = [];
  var count=0;
  var tempArr = [];

  for(var i=0; i<arrLen; i++) {
    count++;
    tempArr.push(arr[i]);

    if (count == size || i == arrLen-1) {
      newArr.push(tempArr);
      tempArr = [];
      count = 0;
    }    
  }  
  return newArr;
}

changeDimension([0, 1, 2, 3, 4, 5], 4);

1voto

Jannic Beck Points 1465
function matrixify(array, n, m) {
    var result = [];
    for (var i = 0; i < n; i++) {
        result[i] = array.splice(0, m);
    }
    return result;
}
a = matrixify(a, 3, 3);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X