首页 > 解决方案 > Google Apps 脚本:在矩阵中取一些行或子矩阵?

问题描述

我有一个简单的问题:

如果我在谷歌应用程序脚本中取一系列值:

//For Example
  var matrix=SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("A1:D4").getValues();

矩阵 = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]];

是否可以像在 Matlab Notation 中那样获得一些行或子矩阵?像这样的东西:

var submatrix= matrix[1:3]; //to take last three rows: submatrix = [[5,6,7,8],[9,10,11,12],[13,14,15,16]];
// or
var submatrix= matrix[1:2][1:2]; //to take: submatrix = [[6,7],[10,11]];`

我找不到类似的符号。使用 concat 和类似功能或以前在范围上执行操作令人沮丧。您知道快速使用矩阵和子矩阵的更简单方法吗?

先感谢您。

标签: google-apps-script

解决方案


下面的示例脚本怎么样?

模式一:

使用slice.

var matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]];

var submatrix1 = matrix.slice(1, 4);
console.log(submatrix1) // [ [ 5, 6, 7, 8 ], [ 9, 10, 11, 12 ], [ 13, 14, 15, 16 ] ]

var submatrix2 = matrix.slice(1, 3).map(e => e.slice(1, 3));
console.log(submatrix2) // [ [ 6, 7 ], [ 10, 11 ] ]

  • 在这种情况下,matrix是非破坏性的。

模式二:

使用splice.

var matrix1 = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]];
var submatrix1 = matrix1.splice(1, 3);
console.log(submatrix1) // [ [ 5, 6, 7, 8 ], [ 9, 10, 11, 12 ], [ 13, 14, 15, 16 ] ]

var matrix2 = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]];
var submatrix2 = matrix2.splice(1, 2).map(e => e.splice(1, 2));
console.log(submatrix2) // [ [ 6, 7 ], [ 10, 11 ] ]

  • 在这种情况下,matrix是破坏性的。
  • 在这种情况下,在 Google Apps Script 中,当 的数组长度matrix很大时splice,使用时,内存可以比 的更有效地使用slice

参考:


推荐阅读