使用 Google 工作表筛选器减去数组(设置差异)
Subtract arrays (Set Difference) with Google Sheets Filter
我需要在 google sheet 秒中过滤一个数组,以从第二个数组中的现有元素中删除第一个数组的所有元素。
数组总是排序的,尽管可能包含重复项。但使事情复杂化的是,数组不是 sheet 中的范围(它们是分隔的文本字符串),并且它们的大小通常不同,例如"a, b, d" - "b, c"(应计算为 "a, d")。
问题第 1 部分:我使用 FILTER 和 COUNTIF 来实现 A - B 的基本逻辑(为简单起见,仅在范围内) ) 是
FILTER(A1:1, COUNTIF(A1:1, B1:1)=0)
但是这些测试用例失败了(应该是❌是):
{a,b,c}-{}⥱{a,b,c}✅
{a,b,c}-{a}⥱{b,c} ✅ {a,b,c}-{b}⥱{a,c}❌{b,c} {a,b,c}-{c}⥱{a,b}❌{b,c}
{a,b,c}-{a,b}⥱✅ {a,b,c}-{b,c}⥱{a}❌{c} {a,b,c}-{a,c}⥱{b}❌{c}
{a,b,c}-{d}⥱{a,b,c}✅ {a,b,c}-{b,d}⥱{a,c}❌{b,c}
{}-{a}⥱{}✅ {}-{a,b}⥱{}✅
{}-{}⥱{}✅
{a,b,c}-{a,b,c}⥱{}✅
我是否应该使用其他实现方式,也许是 MATCH?
问题第 2 部分:因为我需要使用定界文本而不是范围,所以我用 SPLIT(A1, ",") 拆分我的字符串以获得我的数组,但是必须填充它们并使用 array_constraint 使它们具有相同的大小,以便我可以使用 FILTER 和 COUNTIF 函数,例如
ARRAY_CONSTRAIN(SPLIT(CONCATENATE(A1,REPT(",",999)),",",false,false),1,999)
是否有更直接、不太复杂的方法来获取可在 FILTER 和 COUNTIF 中使用的数组?
我偶然发现了这个 sheet 作者 Marc Meyer:https://docs.google.com/spreadsheets/d/1-beBOT1CjVyny7QwLz-RQCeN6fDTcIpLI1iZIjdTSgI/edit#gid=0
问题第 1 部分:我使用 FILTER 和 COUNTIF 来实现 A - B 的基本逻辑(为简单起见,仅在范围内)
应该是
=FILTER(A1:1, ISERROR(MATCH(A1:1, B1:1, false)))
并使用它,我可以将大小不等的数组传递给它,从而避免了填充和拼接的需要。
我需要在 google sheet 秒中过滤一个数组,以从第二个数组中的现有元素中删除第一个数组的所有元素。
数组总是排序的,尽管可能包含重复项。但使事情复杂化的是,数组不是 sheet 中的范围(它们是分隔的文本字符串),并且它们的大小通常不同,例如"a, b, d" - "b, c"(应计算为 "a, d")。
问题第 1 部分:我使用 FILTER 和 COUNTIF 来实现 A - B 的基本逻辑(为简单起见,仅在范围内) ) 是
FILTER(A1:1, COUNTIF(A1:1, B1:1)=0)
但是这些测试用例失败了(应该是❌是):
{a,b,c}-{}⥱{a,b,c}✅
{a,b,c}-{a}⥱{b,c} ✅ {a,b,c}-{b}⥱{a,c}❌{b,c} {a,b,c}-{c}⥱{a,b}❌{b,c}
{a,b,c}-{a,b}⥱✅ {a,b,c}-{b,c}⥱{a}❌{c} {a,b,c}-{a,c}⥱{b}❌{c}
{a,b,c}-{d}⥱{a,b,c}✅ {a,b,c}-{b,d}⥱{a,c}❌{b,c}
{}-{a}⥱{}✅ {}-{a,b}⥱{}✅
{}-{}⥱{}✅
{a,b,c}-{a,b,c}⥱{}✅
我是否应该使用其他实现方式,也许是 MATCH?
问题第 2 部分:因为我需要使用定界文本而不是范围,所以我用 SPLIT(A1, ",") 拆分我的字符串以获得我的数组,但是必须填充它们并使用 array_constraint 使它们具有相同的大小,以便我可以使用 FILTER 和 COUNTIF 函数,例如
ARRAY_CONSTRAIN(SPLIT(CONCATENATE(A1,REPT(",",999)),",",false,false),1,999)
是否有更直接、不太复杂的方法来获取可在 FILTER 和 COUNTIF 中使用的数组?
我偶然发现了这个 sheet 作者 Marc Meyer:https://docs.google.com/spreadsheets/d/1-beBOT1CjVyny7QwLz-RQCeN6fDTcIpLI1iZIjdTSgI/edit#gid=0
问题第 1 部分:我使用 FILTER 和 COUNTIF 来实现 A - B 的基本逻辑(为简单起见,仅在范围内) 应该是
=FILTER(A1:1, ISERROR(MATCH(A1:1, B1:1, false)))
并使用它,我可以将大小不等的数组传递给它,从而避免了填充和拼接的需要。