我的问题与这个问题密切相关,但我正在寻找Javascript中的解决方案
How to Transpose 2D Matrix Stored as C 1D Array
基本上我有一个2D方阵
1 2 3
4 5 6
7 8 9存储方式如下
let anArray = [1 ,2, 3, 4, 5, 6, 7, 8, 9]我如何转置这个矩阵,以使我的源数组的元素按如下所示进行切换?
let newArray = [1, 4, 7, 2, 5, 8, 3, 6, 9] 发布于 2018-08-13 15:02:29
您可以获取数组维度的长度,并将项映射到新数组的特定索引上。
var array = [1 ,2, 3, 4, 5, 6, 7, 8, 9],
n = Math.sqrt(array.length),
transposed = array.map((_, i, a) => a[(i % n) * n + Math.floor(i / n)]);
console.log(transposed.join(' '));
发布于 2018-08-13 15:02:48
您链接到的答案中的方法在JavaScript中也可以很好地工作。
对于3 x 3:
const anArray = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let newArray = [];
for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
newArray[3 * i + j] = anArray[3 * j + i];
}
}
console.log(newArray);
对于N x N,只需将3替换为N即可。
这个答案避免了除法和求底(整数除法),一个好的优化器应该会让代码相对更快。您还可以考虑使用以下命令初始化新数组
let newArray = new Array(9);或者
let newArray = new Array(N * N);但是在尝试这样的“优化”之前分析代码。
发布于 2018-08-13 15:07:15
var arr1 = [];
var arr2 = [];
for(int i=0; i<mat.length; i++) {
for(int j=0; j<mat[i].length; j++) {
arr1.push(mat[i][j]);
}
}
for(int j=0; j<mat[i].length; j++) {
for(int i=0; i<mat.length; i++) {
arr2.push(mat[i][j]);
}
}https://stackoverflow.com/questions/51816633
复制相似问题