例题描述和简单分析
有csv文件,第一列是id,第二列是roomname,第三列是date,第四列是time,第五列是LOB(length of booking),第六列是PB(person booking),如下:
id,roomname,date,time,LOB,PB
1,Gower,2000-01-01,0:00:00,281,Jack
2,Usk,2000-01-01,0:00:00,291,Jack
3,Wye,2000-01-01,0:00:00,283,Jack
4,Bala,2000-01-01,0:00:00,282,Jack
5,Pen y Fan,2000-01-01,0:00:00,292,Jack
6,Llangorse,2000-01-01,0:00:00,290,Jack
7,Snowdon,2000-01-01,0:00:00,288,Jack
8,Taff,2000-01-01,0:00:00,296,Jack
9,Cadair Idris,2000-01-01,0:00:00,292,Jack
现在需要统计订房时间最长的n个房间的名字和订房时间。例如,n为5,结果如下:
1: Taff 296
2: Cadair Idris 292
3: Pen y Fan 292
4: Usk 291
5: Llangorse 290
解法及简要说明
在集算器中编写脚本p1.dfx,如下所示:
A | |
1 | =file("csv.csv").import@tc(roomname,LOB) |
2 | =A1.top(n;-LOB) |
3 | =if(n==1,output("RoomName : "/A2.roomname/" "/A2.LOB),output(A2.(#/": "/roomname/" "/LOB).concat@n())) |
简要说明:
设置网格参数n
A1 读取csv文件中的roomname列和LOB列
A2 获取前n个LOB(length of booking)最大的记录,其中n为脚本的参数
A3 若n等于1,输出订房时间最长的房间名和订房时间,否则输出订房时间最长的n个房间名和订房时间。