如何获取数组之间的差异和交集?(可能具有动态数组功能)
我想要 {"a","b","c","d","e"}-{"a","b","c"} 返回 {"d","e"}
=FILTER({"a","b","c","d","e"},{"a","b","c","d","e"}<>{"a","b","c"})
没有用
PS 对于交叉点(即 excel 中的空格符号),它也不起作用,谢谢
答案1
答案2
如果数组常量(或范围)按字母顺序整齐排列,则答案Scott Craner
有效。但检查表明,如果不是,则结果不太清晰。
我尝试使用IFERROR()
而不是ISERROR()
,似乎效果很好。(ISERROR()
没有 和有 一样好MATCH()
。除了……)然后我突然想到数据可能没有排序,因此,由于这两种方法都依赖于位置,这可能会导致错误的结果。例如,交换比较左字符串中“d”和“c”的位置。使用IFERROR()
,您会得到错误的结果。仅使用ISERROR()
,您会得到错误的结果。放MATCH()
回去,您仍然会得到错误的结果,但并非在所有情况下都是如此。
我承认数据很可能是格式正确的,就像例子中那样,很有可能。90% 的用途?70%?99%?即使对于发帖者来说是 100%,但对于其他人来说可能并非如此。
即使数据格式不符合此目的,下面的方法也能很好地工作:
=FILTER(SORT({"a","b","c","d","e"},,,TRUE),IFERROR(SORT({"a","b","c","d","e"},,,TRUE)<>SORT({"a","b","c"},,,TRUE),TRUE))
导致这一切的问题在于比较是按位置进行的,即从第 1 位到第 1 位,从第 2 位到第 2 位,依此类推。然后FILTER()
有一系列TRUE/FALSE
与其给定范围(或数组常量)位置相匹配的 。(这就是为什么必须是五元素数组与三元素数组进行比较,而不是相反。这样,就有五个结果与要过滤的五个元素相匹配,而不仅仅是三个结果。)
因此你必须确保位置上的物品是同类的,而不是苹果和橘子之间的。
对于稍微复杂一点的情况,即使这样也行不通。比如{"a","b","b","b","c"}
数组常量或范围。这需要更复杂的公式,并且很大程度上取决于给定电子表格的实际数据。