某个表格的第1列是人名,后面多列是此人某次采购的产品,一个人一次可以采购多个同样的产品,也可以多次采购。
| A | B | C | D | |
| 1 | John | Apple | Apple | Orange |
| 2 | Paul | Grape | ||
| 3 | John | Pear | ||
| 4 | Steve | Lychee | Grape | |
| 5 | Jessica | Apple |
需要整理成交叉表,上表头是产品,左表头是人名。
| E | F | G | H | I | J | |
| 1 | Name | Apple | Orange | Pear | Grape | Lychee |
| 2 | Jessica | 1 | ||||
| 3 | John | 2 | 1 | 1 | ||
| 4 | Paul | 1 | ||||
| 5 | Steve | 1 | 1 |
使用 SPL XLL
=spl("=?.news( ~.m(2:).select(~); get(1)(1):Name, ~ ).pivot@s(Name; #2,count(#2))",A1:D5)

函数news用序列的每个成员生成一条记录,函数 get 在多层循环中按层数取循环变量,~.m(2:)表示当前成员的第 2 个到最后 1 个子成员,pivot@s行转列,并计算每组数据。(1)是序列的第 1 个子成员,#1 是二维表的第 1 列。


















![代码随想录算法训练营第69天:图论7[1]](https://img-blog.csdnimg.cn/img_convert/b2ecaf1af557f16218ebcaf78814e274.png)
