首页 > 解决方案 > 谷歌电子表格中的逻辑异常/差异范围

问题描述

我想获得合乎逻辑的(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-scriptgoogle-sheets

解决方案


由于在 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]; });

您还可以在此处查看几个示例:

在此处输入图像描述 在此处输入图像描述


推荐阅读