我想在 Google 电子表格中获取逻辑 (A - B)
或 (A\B)
。
所以,有:
答:答
{1,2,3,4}
和
B:B
{2,3,5,6}
所以我的公式
=my_amazing_formula(A:A, B:B)
应该返回
{1,4}
(A 的元素不存在于 B 中)
问题
我怎样才能实现这个目标?
最佳答案
因为不存在 HashSet 这样的数据结构在 Google Apps 脚本中,这是一个很难有效解决的问题。您可以选择二次解决方案,对于第一个范围中的每个项目,它将迭代整个第二个项目,尝试找到“匹配”,以便丢弃它。这看起来有点像@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]; }) ;
您还可以在此处查看几个示例:
关于google-apps-script - 谷歌电子表格中的逻辑异常(exception)/差异范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58593542/