google-apps-script - 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 和类似功能或以前在范围上执行操作令人沮丧。您知道快速使用矩阵和子矩阵的更简单方法吗?
先感谢您。
解决方案
下面的示例脚本怎么样?
模式一:
使用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
。
参考:
推荐阅读
- javascript - Jquery 包装元素
- r - 使用 ggplot 在堆积条形图中添加计数标签
- java - 如何从 SQLite 获取一行到具有自定义对象的模型?
- android - 如何使用 Spinner onItemSelected?
- facebook - 有没有办法通过 Facebook API 提取 AdAccount 发票?
- python - 如何在 Python 运行时根据用户选择安装依赖项?
- javascript - jQuery.validate().form() 仅在加载一次时始终为真
- wordpress - 帖子类型有多个单词时查询wordpress自定义帖子类型
- android - 在接收 FCM 推送通知时使用设备实际地理位置向服务器发送响应
- c# - Unity ARFoundation 找不到 ARCameraBackground