分享

列表数据处理之并集 - Excel函数式编程

 ExcelEasy 2024-07-16 发布于北京


之前我们介绍了列表数据处理中的交集和差集:

列表数据处理:交集 - Excel函数式编程

列表数据处理:交集函数的扩展 - Excel函数式编程

列表数据处理:差集 - Excel函数式编程

今天我们介绍并集的自定义函数。

问题

两个集合A和B的并集,指的是在A或B中出现过的元素构成的集合。

比如,

显然,a, b, c, d, e在A中出现过,b,f,e在B中出现过,它们都应该是集合A和集合B并集中的元素。

这里很容易就会简单的采用VSTACK函数合并两个集合,

=VSTACK(A2:A6,C2:C4)

结果如下,

看上去得到结果了。

但是要注意,这里b和e出现了两次(一次代表A,一次代表B)。

但是根据并集的定义,它们只能出现一次,即这个并集应该包含下面的元素:

{a; b; c; d; e; f}

去重

一个非常符合直觉的想法就是去重。

对上面的VSTACK函数的结果进行去重操作:

=UNIQUE(VSTACK(A2:A6,C2:C4))

就可以得到期望的结果:

实现

这个并集的实现非常简单,

/** 计算两个列表的并集*/UNION = LAMBDA(setA, setB,    UNIQUE(VSTACK(setA, setB)))

调用时使用下面的公式:

=UNION(A2:A6,C2:C4)
讨论

我们在一开始的分析中针对一个元素在两个集合中都出现这种情况,采用了去重这种操作。但是现实中我们还是会遇到需要保留的情况。甚至,同一个元素在两个集合中分别出现多次。

比如,如果原来的集合A和集合B的数据如下:

这里的集合A中包含两个b,上面的去重公式得到的结果如下:

结果中只含有一个b,但是这次,我们期望的是结果中包含集合A和B中的所有元素。

当然,直接用VSTACK就可以了。

不过我们如何设置自定义函数,从而使得在调用时可以自行决定是否去重呢?

这里我们可以使用缺省参数。

修改函数定义如下:


/** 计算两个列表的并集*/UNION = LAMBDA(setA, setB,[func], IF( ISOMITTED(func), VSTACK(setA, setB), func(VSTACK(setA, setB)) ))

参数中加入一个[func],用方括号[]表示该参数可以省略。

然后在程序中判断该参数,如果省略了,就表示直接合并,否则就是用这个函数对合并结果去重。(当然,这个函数只能使用UNIQUE才会得到需要的结果)。

详情咨询客服(底部菜单-知识库-客服)

Excel+Power Query+Power Pivot+Power BI


Power Excel 知识库    按照以下方式进入知识库学习
Excel函数   底部菜单:知识库->Excel函数

自定义函数  底部菜单:知识库->自定义函数

Excel如何做  底部菜单:知识库->Excel如何做

面授培训  底部菜单:培训学习->面授培训

Excel企业应用  底部菜单:企业应用

也可以在历史文章中学习Excel,Power Query,Power Pivot,Power BI,Power Automate各种技巧。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章