javascript - 沿对 Angular 线遍历二维数组(矩阵)

标签 javascript matrix multidimensional-array

所以我找到了this对 Angular 线遍历数组非常有帮助的线程。我被困在镜像上。例如:

var m = 3;
var n = 4;
var a = new Array();
var b = 0;

for(var i = 0; i < m; i++) {
  a[i] = new Array(n);
  for(var j = 0; j < n; j++) {
    a[i][j] = b;
      b++;
  }
}

for (var i = 0; i < m + n - 1; i++) {
  var z1 = (i < n) ? 0 : i - n + 1;
  var z2 = (i < m) ? 0 : i - m + 1;
  for (var j = i - z2; j >= z1; j--) {
    console.log(a[j][i - j]);
  }
}

控制台读取 [[0],[4,1],[8,5,2],[9,6,3],[10,7],[11]]

我希望它显示为 [[8],[4,9],[0,5,10],[1,6,11],[2,7],[3]]

被难住了一阵子,就像魔方一样>_<

最佳答案

嗯,我发现整个 z1、z2 逻辑有点不可读,所以我做了一些不同的事情:

var m = 3;
var n = 4;
var a = new Array();
var b = 0;

for(var i = 0; i < m; i++) {
  a[i] = new Array(n);
  for(var j = 0; j < n; j++) {
    a[i][j] = b;
      b++;
  }
}

var out = new Array();
for (var i = 1 - m; i < n; i++) {
    var group = new Array();
    for (var j = 0; j < m; j++) {
        if ((i + j) >= 0 && (i + j) < n) {
            group.push(a[j][i + j]);
        }
    }
    out.push(group);
}
console.log(out);

打印 [[8], [4, 9], [0, 5, 10], [1, 6, 11], [2, 7], [3]] 到控制台。

工作原理

你的矩阵构造给你一个像这样的矩形(其中你的 a 数组是行的集合):

 0  1  2  3
 4  5  6  7
 8  9 10 11

这意味着对 Angular 线在这个网格上:

 #  #  0  1  2  3
    #  4  5  6  7  #
       8  9 10 11  #  #

现在我们只是在一个倾斜的矩形上循环,它看起来像这样标准化:

 #  #  0  1  2  3
 #  4  5  6  7  #
 8  9 10 11  #  #

现在您会注意到,对于您添加的每一行,您最终都会得到一个额外的列(以 # 开头)并且第一列现在倾斜了这个数量(如果您想象将第一行固定到位并将下面的行滑动到左侧)。所以对于我们的外部 for 循环(在列上),第一列实际上是旧的第一列,0,减去行数 m,加上 1,得到 0 - m + 11 - m。最后一列实际上保留在原位,因此我们仍在循环到 n。然后它只是获取每一列并遍历每一 m 行(内部 for 循环)的问题。

当然,这会给您留下一堆 undefined(上面网格中的 #),但我们可以用一个简单的 跳过它们if 以确保我们的 ijmn 范围内。

效率可能略低于 z1/z1 版本,因为我们现在循环处理冗余的 # 单元格而不是预先计算它们,但这不会对现实世界产生任何影响,我认为代码最终可读性更高。

关于javascript - 沿对 Angular 线遍历二维数组(矩阵),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2862802/

相关文章:

javascript - 多维 Javascript 数组/对象

javascript - 使用 javascript 实现绝对响应位置

python - 如何使用 numpy 获得两个矩阵的点积?

python - 如何有效地计算 3d numpy 数组中的相邻元素

c - 从 C 文件中获取矩阵

c - 我只是想像二维数组一样打印一维数组。但是当我运行这个程序时它没有显示任何输出

python - 计算特定值的两个二维二进制 numpy 数组的重叠值

javascript - Angular Material 锁定 md-sidenav 占据整个屏幕

javascript - 使用正则表达式计算字符串中子字符串的所有出现次数

javascript - 循环 javascript 不起作用