6.12 枚举分组:可重复分组

 

有时我们需要把满足多个分组条件的成员,重复分配到所有对应的分组中。

根据城市 GDP 表,分别统计直辖市、一线城市、二线城市的人均 GDP。需要注意的是,分组可能会有重复成员,比如北京既是一线城市,又是直辖市。部分数据如下:

ID CITY GDP POPULATION
1 Shanghai 32679 2418
2 Beijing 30320 2171
3 Shenzhen 24691 1253
4 Guangzhou 23000 1450
5 Chongqing 20363 3372

在 SPL 中函数 A.enum() 的选项 @r,用于在枚举分组时每组检查所有成员是否匹配。

脚本:

A
1 =T(“CityGDP.txt”)
2 [[“Beijing”,“Shanghai”,“Tianjin”,“Chongqing”],[“Beijing”,“Shanghai”,“Guangzhou”,“Shenzhen”],[“Chengdu”,“Hangzhou”,“Chongqing”,“Wuhan”,“Xian”,“Suzhou”,“Tianjin”,“Nanjing”,“Changsha”,“Zhengzhou”,“Dongguan”,“Qingdao”,“Shenyang”,“Ningbo”,“Kunming”]]
3 [A2(1).pos(?)>0,A2(2).pos(?)>0,A2(3).pos(?)>0]
4 =A1.enum@r(A3,CITY)
5 [直辖市, 一线城市, 二线城市]
6 =A4.new(A5(#):AREA,.sum(GDP)/.sum(POPULATION)*10000:CAPITA_GDP)

A1:导入城市 GDP 表。
A2:定义直辖市、一线城市和二线城市常量。
A3:枚举直辖市、一线城市和二线城市的条件。
A4:使用函数 A.enum() 按枚举条件分组,使用选项 @r 时每组检查所有成员是否匹配。
A5:定义每组的名称。
A6:根据枚举分组结果,统计每组的人均 GDP。