google-apps-script - 谷歌电子表格中的逻辑异常/差异范围
问题描述
我想获得合乎逻辑的(A - B)
或(A \ B)
在谷歌电子表格中。
所以,有:
一个:一个
{1,2,3,4}
和
乙:乙
{2,3,5,6}
所以我的公式
=my_amazing_formula(A:A, B:B)
应该返回
{1,4}
(B中不存在A的元素)
问题
我怎样才能做到这一点?
解决方案
由于在 Google Apps Script 中还没有像HashSet这样的数据结构,所以这是一个很难有效解决的问题。您可以选择二次解决方案,对于第一个范围内的每个项目,该解决方案将遍历整个第二个项目以尝试找到“匹配”,以丢弃它。这看起来有点像@Cooper 的解决方案。
作为替代方案,并考虑到 Google Apps 脚本的对象保留属性插入顺序,您可以使用以下代码,理论上应该会产生更好的性能结果(特别是对于较大的工作负载)。
function DIFFERENCE(range1, range2) {
var o = {};
for (var i=0; i<range1.length; i++) {
for (var j=0; j<range1[0].length; j++) {
if (!o[range1[i][j]])
o[range1[i][j]] = true;
}
}
for (var i=0; i<range2.length; i++) {
for (var j=0; j<range2[0].length; j++) {
if (o[range2[i][j]])
o[range2[i][j]] = false;
}
}
return Object.keys(o).filter(function f(key) { return o[key]; }).map(function(res) { return parseFloat(res) });
}
此函数假定您正在处理数字。如果您希望它也适用于字符串,则可以将最后一行代码替换为以下内容:return Object.keys(o).filter(function f(key) { return o[key]; });
您还可以在此处查看几个示例:
推荐阅读
- amazon-web-services - 如何使用 vscode aws 扩展编辑 lambda (go)
- python - 如何在使用 Tomtom 进行地理编码时使用谷歌转换地理编码?(Python?
- python - 异常:AttributeError:“DefaultAzureCredential”对象没有使用 Azure Function 和 Python 的属性“signed_session”
- java - 我如何从界面中引用它
- flutter - 在自定义 Painter Flutter 中包装段落文本
- javascript - 通过 JS 应用多个 RegExp .match() 时如何阻止页面死机?
- sql - SQL Server 编写基于值的条件连接
- flutter - 如何在颤动中编辑数组中的元素
- amazon-web-services - 使用每个 terraform 将私有路由表附加到 NAT 网关
- html - 如何在 Outlook 桌面(Outlook 2007)中垂直对齐同一 TD 中的图像(标签内)和文本