6.10 枚举分组:每个成员只存放到第一个匹配组
在分组时,我们经常需要把满足同一个条件的记录分配到同一组中。比如根据城市人口将城市分为大、中、小型城市,根据年收入将家庭分为富裕、中产、小康、贫困等等。根据事先定义好的枚举条件,将符合条件的成员分配到对应的组中,这种分组我们称为枚举分组。
按事现定义好的一组枚举条件的顺序,将待分组集合的成员作为参数计算这批条件,条件成立者都被划分到与该条件对应的第一个匹配组中。
根据中国城市的市区人口,将城市分类并统计数量。其中超大城市 200 万人口以上,特大城市 100-200 万人口,大城市 50-100 万,其他中小城市。部分数据如下:
ID | CITY | POPULATION | PROVINCE |
---|---|---|---|
1 | Shanghai | 12286274 | Shanghai |
2 | Beijing | 9931140 | Beijing |
3 | Chongqing | 7421420 | Chongqing |
4 | Guangzhou | 7240465 | Guangdong |
5 | Hong Kong | 7010000 | Hong Kong Special Administrative Region |
… | … | … | … |
在 SPL 中函数 A.enum() 用于枚举分组,默认每个成员只存放到第一个匹配组。
脚本:
A | |
---|---|
1 | =T(“UrbanPopulation.txt”) |
2 | [?>2000000,?>1000000,?>500000,?<=500000] |
3 | =A1.enum(A2,POPULATION) |
4 | [超大城市, 特大城市, 大城市, 中小城市] |
5 | =A3.new(A4(#):CITY_TYPE,~.count():COUNT) |
A1:导入城市人口表。
A2:定义分组条件。
A3:使用函数 A.enum() 将城市人口表按条件进行枚举分组,默认将每个成员只存放到第一个匹配组。
A4:定义每组的名称。
A5:根据枚举分组结果,统计每个组的城市数量。