如何解决Google Apps Script:在矩阵中取一些行或子矩阵? 模式 1:模式 2:参考:
如果我在谷歌应用程序脚本中采用一系列值:
//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,16]];
// or
var submatrix= matrix[1:2][1:2]; //to take: submatrix = [[6,7],[10,11]];`
我找不到类似的符号。使用 concat 和类似的函数或之前在范围上操作是令人沮丧的。您知道一种更简单的快速处理矩阵和子矩阵的方法吗?
提前谢谢你。
解决方法
下面的示例脚本怎么样?
模式 1:
使用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,8 ],[ 9,12 ],[ 13,16 ] ]
var submatrix2 = matrix.slice(1,3).map(e => e.slice(1,3));
console.log(submatrix2) // [ [ 6,7 ],[ 10,11 ] ]
- 在这种情况下,
matrix
是非破坏性的。
模式 2:
使用splice
。
var matrix1 = [[1,16]];
var submatrix1 = matrix1.splice(1,3);
console.log(submatrix1) // [ [ 5,16 ] ]
var matrix2 = [[1,16]];
var submatrix2 = matrix2.splice(1,2).map(e => e.splice(1,2));
console.log(submatrix2) // [ [ 6,11 ] ]
- 在这种情况下,
matrix
是破坏性的。 - 在这种情况下,在 Google Apps Script 中,当
matrix
的数组长度很大时,当使用splice
时,可以比slice
更有效地使用内存。
参考:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。