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 s(上面网格中的 # s),但我们可以用简单的 if 跳过它们确保我们的 i & j位于m 内& n界限。

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

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

相关文章:

c++ - 一维 vector 到多维数组/vector

javascript - 将wordpress中的样式表和脚本与functions.php链接

c++ - Eigen:如何制作矩阵的深层拷贝?

python - 通过 scipy.io.loadmat 将 matlab 3D 矩阵传输到 python 3D 数组出错了

java - 寻找两个节点之间的最短距离

python - 分离数据集的第一行并重新分配给新矩阵-python

php - 如何将MySQL查询数据打印到php多维数组中?

javascript - 对链接中的每个单词应用首字下沉

javascript - 关闭弹出窗口后刷新父窗口

javascript - 如何使用jQuery触发对客户端计算机的打印请求