溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

SPL 的序號(hào)思維及定位計(jì)算

發(fā)布時(shí)間:2020-07-25 14:44:06 來(lái)源:網(wǎng)絡(luò) 閱讀:178 作者:raqsoft 欄目:大數(shù)據(jù)

SPL中的集合都是有序的,可以用序號(hào)來(lái)引用成員,靈活運(yùn)用序號(hào)可以使運(yùn)算更為簡(jiǎn)捷高效。

1 成員訪問(wèn)

SPL的某些函數(shù)中可以使用序號(hào)或序號(hào)數(shù)列作為參數(shù),最簡(jiǎn)單的應(yīng)用是直接用序號(hào)訪問(wèn)成員,這和一般編程語(yǔ)言中的數(shù)組類似。


A
1[1,3,5,7,9]
2=A1(1)
3=A1(3)
4>A1(2)=4
5>A1(4)=8

A2與A3從序列中獲取指定位置的成員,位置序號(hào)是從1開(kāi)始的,結(jié)果如下:

SPL 的序號(hào)思維及定位計(jì)算? SPL 的序號(hào)思維及定位計(jì)算

A4與A5修改了序列中的某個(gè)成員,用分步執(zhí)行的方式,可以看到A1中序列的變化如下:

SPL 的序號(hào)思維及定位計(jì)算

使用A.m(i) 函數(shù)可以從后面倒數(shù)取或循環(huán)取,這個(gè)函數(shù)為A(i) 提供了有效的補(bǔ)充。


A
1[1,3,5,7,9]
2=A1.m(3)
3=A1.m(-2)
4=A1.m@r(6)
5=A1.m@r(12)
6=A1.m(6)

A2和A3用A.m() 函數(shù)從序列中獲取指定序號(hào)成員的值,其中-2表示倒數(shù)第2個(gè)成員。A4和A5中的代碼添加了@r選項(xiàng),在獲取成員時(shí),如果指定的序號(hào)越界則循環(huán)取數(shù),如序號(hào)12循環(huán)A1中的成員2次后,相當(dāng)于獲取第2個(gè)成員。A2~A5結(jié)果如下:

SPL 的序號(hào)思維及定位計(jì)算SPL 的序號(hào)思維及定位計(jì)算SPL 的序號(hào)思維及定位計(jì)算SPL 的序號(hào)思維及定位計(jì)算

A6中,指定的序號(hào)6超過(guò)了序列的長(zhǎng)度,又沒(méi)有使用@r選項(xiàng),會(huì)返回空值。

SPL 的序號(hào)思維及定位計(jì)算

SPL還提供了一組關(guān)于位置查找的函數(shù),它們都是以p開(kāi)頭的,如:


A
1[3,5,1,9,7]
2=A1.pos(5)
3=A1.pmin()
4=A1.pmax()
5=A1.pselect(~%5==0)

A2查找指定成員的位置序號(hào),如果有多個(gè)同值成員,只返回第1個(gè)序號(hào)。A3和A4分別返回最小與最大成員的序號(hào)。A5中,找到第1個(gè)滿足設(shè)定條件的成員的序號(hào),這里查找第1個(gè)5的倍數(shù)成員所在位置。計(jì)算后,A2~A5結(jié)果如下:

SPL 的序號(hào)思維及定位計(jì)算SPL 的序號(hào)思維及定位計(jì)算SPL 的序號(hào)思維及定位計(jì)算SPL 的序號(hào)思維及定位計(jì)算

如果無(wú)法找到成員,A.pos() 函數(shù)將返回null,因此可以用A.pos()函數(shù)來(lái)判斷成員是否屬于集合。


A
1[3,5,1,9,7]
2=A1.pos(1)!=null
3=A1.pos(2)!=null

A2與A3計(jì)算結(jié)果如下:

SPL 的序號(hào)思維及定位計(jì)算SPL 的序號(hào)思維及定位計(jì)算

2 子集訪問(wèn)

用序號(hào)數(shù)列作為參數(shù)可以訪問(wèn)集合的子集,如:


A
1[3,5,4,6,1]
2=A1([1,3,5])
3=A1([3,5,2])
4=A1([4,1,3,1])
5>A1([1,3,5])=[12,43,28]
6>A1([2,4,3])=0

A2,A3與A4分別從序列中獲取子集,計(jì)算后,A2,A3和A4結(jié)果如下:

SPL 的序號(hào)思維及定位計(jì)算? SPL 的序號(hào)思維及定位計(jì)算? SPL 的序號(hào)思維及定位計(jì)算

A5與A6修改序列中的成員,使用序數(shù)數(shù)列作為參數(shù),一次修改多個(gè)成員。分步執(zhí)行時(shí)可以看到A1中序列的改變?nèi)缦拢?/p>

SPL 的序號(hào)思維及定位計(jì)算

A.m() 函數(shù)也可以使用數(shù)列參數(shù)獲得子集:


A
1[3,5,4,6,1]
2=A1.m([1,-1])
3=A1.m@r([1,6,12])
4=A1.m@0([1,6,3])

在例子中,參數(shù)數(shù)列中可以使用負(fù)數(shù)表示倒數(shù)的位置,也可以添加@r選項(xiàng)表示位置越界回轉(zhuǎn)。另外還可以使用@0選項(xiàng),此時(shí)如果參數(shù)序列中存在越界的序號(hào),則對(duì)應(yīng)的空值不會(huì)出現(xiàn)在結(jié)果中。A2,A3和A4結(jié)果如下:

SPL 的序號(hào)思維及定位計(jì)算 ?SPL 的序號(hào)思維及定位計(jì)算? SPL 的序號(hào)思維及定位計(jì)算

?

如果在位置查找函數(shù)中加上@a選項(xiàng),將找到所有滿足條件的成員,并用它們的序號(hào)構(gòu)成數(shù)列返回:


A
1[3,2,1,9,6,9,1,2,8]
2=A1.pos@a(2)
3=A1.pmin@a()
4=A1.pmax@a()
5=A1.pselect@a(~%2==0)
6=A1.pos@a(8)

由于添加了@a選項(xiàng),此時(shí)A2會(huì)返回序列A1中所有2的位置,A3會(huì)返回值最小的所有成員的序號(hào),A4會(huì)返回值最大的所有成員的序號(hào),A5會(huì)返回所有2的倍數(shù)的成員的序號(hào)。使用@a選項(xiàng)時(shí),即使只找到一個(gè)成員,也將返回序號(hào)的序列,而不是序號(hào)本身,如A6查找8所在的所有位置。A2~A6計(jì)算結(jié)果如下:

SPL 的序號(hào)思維及定位計(jì)算? SPL 的序號(hào)思維及定位計(jì)算? SPL 的序號(hào)思維及定位計(jì)算

SPL 的序號(hào)思維及定位計(jì)算? SPL 的序號(hào)思維及定位計(jì)算

?

同時(shí)返回多個(gè)成員的位置需要用A.pos() 函數(shù)時(shí),根據(jù)需要可能需要添加@i選項(xiàng),如:


A
1[3,2,1,9,6,9,1,2,8]
2=A1.pos@i([2,9,8])
3=A1.pos@i([3,1,1,1])
4=A1.pos@i([1,2,3])
5=A1.pos([1,2,3])
6=A1.pos([1,1,2,2])
7=A1.pos([1,1,1,2,2,2,3,3])

使用A.pos@i() 在查找參數(shù)序列中的成員時(shí),會(huì)單向順次進(jìn)行;而只使用A.pos() 時(shí)只會(huì)簡(jiǎn)單判斷序列A中是否包含參數(shù)序列中的每個(gè)成員。A2~A7結(jié)果如下:

SPL 的序號(hào)思維及定位計(jì)算SPL 的序號(hào)思維及定位計(jì)算SPL 的序號(hào)思維及定位計(jì)算

SPL 的序號(hào)思維及定位計(jì)算SPL 的序號(hào)思維及定位計(jì)算SPL 的序號(hào)思維及定位計(jì)算

可以看到,A3與A4的結(jié)果為空,其中A3計(jì)算時(shí)找不到序列中的第3個(gè)1,A4計(jì)算時(shí)無(wú)法依次找到1,2,3。或者說(shuō),A.pos@i() 只會(huì)返回遞增數(shù)列,如果不能找到結(jié)果即返回null。

A.pos@i() 在有成員找不到時(shí)將返回空,但由于次序和可重復(fù)成員的因素,并不能簡(jiǎn)單地用其判斷子集是否被包含,一般要用交運(yùn)算:


A
1[3,2,1,9,6,9,1,2,8]
2=A1.pos@i([1,9,6])==null
3=A1.pos@i([1,2,3])==null
4=A1.pos([1,2,3,4])==null
5=A1.pos([1,2,3,3])==null
6[1,1,2,2]
7[1,1,2,2,3,3]
8=A6^A1==A6
9=A7^A1==A7

A2~A4結(jié)果如下:

SPL 的序號(hào)思維及定位計(jì)算SPL 的序號(hào)思維及定位計(jì)算SPL 的序號(hào)思維及定位計(jì)算SPL 的序號(hào)思維及定位計(jì)算

其中,用A.pos@i(B) 查找判斷時(shí),如果結(jié)果非空,說(shuō)明在A中可以依次找到B中的成員,說(shuō)明A必然包含B。但是如果查找結(jié)果是null,只能說(shuō)明在A中無(wú)法依次找到B中的成員,并不能說(shuō)明A必然不包含B,比如A3中的情況。

A.pos(B) 查找判斷時(shí),如果結(jié)果為空,說(shuō)明B中一定有成員是無(wú)法在A中找到的,說(shuō)明A必然不包含B。但是,如果此時(shí)查找的結(jié)果不為空,如果B中存在重復(fù)的成員,那么是無(wú)法保證A包含B的,如A5中的情況。

A8與A9結(jié)果如下:

SPL 的序號(hào)思維及定位計(jì)算SPL 的序號(hào)思維及定位計(jì)算

B^A==B來(lái)判斷A是否包含B是可行的,根據(jù)A8和A9中的結(jié)果,可以確定A1包含A6,但A1不包含A7。使用這種方法時(shí)需要注意,交運(yùn)算的操作數(shù)不能反過(guò)來(lái),否則計(jì)算A^B得到的結(jié)果中成員的順序有可能與B不同,就無(wú)法正確判斷了。

3 循環(huán)函數(shù)定位

類似符號(hào)~,在循環(huán)函數(shù)的參數(shù)中,可以用#表示當(dāng)前成員的序號(hào)。


A
1[5,4,3,2,1]
2=A1.(#)
3=A1.(#+~)
4=A1.select(#%3==2)
5=A1.group(int((#-1)/2))

A2獲得序號(hào)構(gòu)成的數(shù)列,A3獲得每個(gè)位置成員與序號(hào)相加的結(jié)果序列。A4用A.select()函數(shù)在A1的序列中選出每3個(gè)中的第2個(gè)成員,即第2,5,8,…位置的成員,并構(gòu)成序列。A5中將A1每2個(gè)成員分為一組。A2~A5結(jié)果如下:

SPL 的序號(hào)思維及定位計(jì)算? SPL 的序號(hào)思維及定位計(jì)算

SPL 的序號(hào)思維及定位計(jì)算? SPL 的序號(hào)思維及定位計(jì)算

在循環(huán)函數(shù)中,SPL還提供用[ ]符號(hào)以相對(duì)方式訪問(wèn)成員:


A
1[1,2,3,4,5]
2=A1.(~[0])
3=A1.(~[1])
4=A1.((~-~[-1])/~[-1])
5=demo.query("select * from ? STOCKRECORDS where STOCKID=000062").sort(DATE)
6=A5.((CLOSING-CLOSING[-1])/CLOSING[-1])
70
8=A5.max(if(CLOSING>CLOSING[-1],A7=A7+1,A7=0))

A2就是從序列中取出每個(gè)成員本身,A3在每個(gè)位置取出后面的1個(gè)成員,A4計(jì)算出序列中每個(gè)成員與前一個(gè)成員相比較的增長(zhǎng)率。A2,A3和A4計(jì)算結(jié)果如下:

SPL 的序號(hào)思維及定位計(jì)算? SPL 的序號(hào)思維及定位計(jì)算? SPL 的序號(hào)思維及定位計(jì)算

A5查詢出指定編號(hào)的股票信息。A6計(jì)算出每日股價(jià)的漲幅,A8進(jìn)一步計(jì)算出這支股票的最大連漲天數(shù)。A6和A8的結(jié)果如下:

SPL 的序號(hào)思維及定位計(jì)算SPL 的序號(hào)思維及定位計(jì)算

還可以用~[a,b]在循環(huán)運(yùn)算中訪問(wèn)子集:


A
1[1,2,3,4,5]
2=A1.(~[-1,1])
3=A1.(~[-1,1].avg())
4=A1.(~[1-#,0].sum())
5=A1.(~[,0].sum())
6=A1.(~[0,].sum())

A2在每個(gè)位置列出了序列中前后3個(gè)位置的成員。A3計(jì)算每個(gè)位置的移動(dòng)平均值。A4和A5同樣都是累計(jì)求和。A6計(jì)算反向的累計(jì)求和,即剩余成員的總和。A2~A6結(jié)果如下:

SPL 的序號(hào)思維及定位計(jì)算 ?SPL 的序號(hào)思維及定位計(jì)算? SPL 的序號(hào)思維及定位計(jì)算

SPL 的序號(hào)思維及定位計(jì)算? SPL 的序號(hào)思維及定位計(jì)算

4 對(duì)位訪問(wèn)

我們知道,循環(huán)函數(shù)中的符號(hào)#用以表示當(dāng)前成員的序號(hào),事實(shí)上它就是個(gè)數(shù),和其它數(shù)一樣可以參加運(yùn)算,特別是可以用作序號(hào)訪問(wèn)其它序列的成員。利用這個(gè)特點(diǎn),我們可以在計(jì)算中對(duì)位訪問(wèn)其它序列:


A
1[1,2,3,4,5]
2=A1.(A1(#))
3=A1.(A1.m(#-1))
4[5,4,3,2,1]
5=A1.(~+A4(#))
6=A1++A4
7=10.(if(#%2==1,A1((#-1)/2+1),A4(#/2)))

在循環(huán)計(jì)算中,表達(dá)式中的#可以用來(lái)表示當(dāng)前的序號(hào)。計(jì)算后,A2,A3,A5,A6和A7結(jié)果分別如下:

SPL 的序號(hào)思維及定位計(jì)算? SPL 的序號(hào)思維及定位計(jì)算

SPL 的序號(hào)思維及定位計(jì)算? SPL 的序號(hào)思維及定位計(jì)算? SPL 的序號(hào)思維及定位計(jì)算

使用多個(gè)等長(zhǎng)的序列時(shí),利用對(duì)位訪問(wèn)可以實(shí)現(xiàn)出類似記錄字段的效果:


A
1[Bray,Jacob,Michael,John]
2[65,87,98,72]
3[76,82,78,88]
4=A1.ranks@z(A2(#)+A3(#))
5=A1.new(~:name,A4(#):rank)

A4計(jì)算總分的排名,計(jì)算總分時(shí)按照位置取得成績(jī)。A5生成姓名與排名的序表,同樣根據(jù)位置將兩個(gè)序列中的數(shù)據(jù)關(guān)聯(lián)起來(lái)。A4和A5結(jié)果如下:

SPL 的序號(hào)思維及定位計(jì)算? SPL 的序號(hào)思維及定位計(jì)算

5 序列對(duì)齊

利用對(duì)位訪問(wèn)之前需要確保各序列已經(jīng)按同一次序排好,但實(shí)際應(yīng)用時(shí)序列未必總是這樣,這時(shí)使用對(duì)齊函數(shù)A.align() 即可令序列按某個(gè)基準(zhǔn)序列重新排序:


AB
1=demo.query("select * from ? EMPLOYEE")/員工表
2=demo.query("select * from ? ATTENDANCE").align(A1:EID,EMPLOYEEID)/考勤表按員工編號(hào)對(duì)齊
3=demo.query("select * from PERFORMANCE").align(A1: ? EID, EMPLOYEEID)/績(jī)效表按員工編號(hào)對(duì)齊
4=A1.new(NAME,SALARY*(1+A2(#).ABSENCE+A3(#).EVALUATION):salaryPaid)/新建序表計(jì)算工資,A1,A2,A3同序
5=demo.query("select * from GYMSCORE ? where EVENT='Vault'")/跳馬分?jǐn)?shù)
6=demo.query("select * from GYMSCORE ? where EVENT='Floor'").align(A5:NAME,NAME)/自由體操分?jǐn)?shù),按運(yùn)動(dòng)員對(duì)齊
7=A5.(round(SCORE*0.6+A6(#).SCORE *0.4,3))/計(jì)算加權(quán)分
8=A7.ranks@z()/計(jì)算加權(quán)分名次
9=A5.new(NAME,A7(#):score,A8(#):rank)/新建序表計(jì)算運(yùn)動(dòng)員,加權(quán)分和排名

A2和A3的序表均已按A1中的員工編號(hào)對(duì)齊,A4計(jì)算出員工的工資序表如下:

SPL 的序號(hào)思維及定位計(jì)算

A6將數(shù)據(jù)按照A5序表中運(yùn)動(dòng)員的名字對(duì)齊,A7據(jù)此計(jì)算出加權(quán)成績(jī)。A8再計(jì)算出加權(quán)分的排名后,最終A9整理出結(jié)果序表如下:

SPL 的序號(hào)思維及定位計(jì)算

事實(shí)上,使用@a選項(xiàng)的對(duì)齊函數(shù)也會(huì)返回一個(gè)與基準(zhǔn)序列對(duì)齊的序列,只是其每個(gè)成員都是集合,同樣可以應(yīng)用對(duì)位訪問(wèn)。


AB
1=demo.query("select * from ? EMPLOYEE")/員工表
2[California,Texas,Pennsylvania]
3=A1.align@a(A2,STATE)/按照A2中的州對(duì)齊分組
4=A3.new(A2(#):STATE,~.count():Count,round(~.avg(age(BIRTHDAY)),2):Age)/用#根據(jù)A3中的序號(hào)查找A2中的字段值

計(jì)算后,A4結(jié)果如下:

SPL 的序號(hào)思維及定位計(jì)算

無(wú)選項(xiàng)A.align() 函數(shù)將對(duì)應(yīng)基準(zhǔn)序列的每個(gè)成員,在源序列中取出第1個(gè)成員再構(gòu)成集合返回,而不是返回集合的集合,當(dāng)事先明確知道每個(gè)分組子集只有1個(gè)成員時(shí),使用A.align()函數(shù)即相當(dāng)于完成了一次按基準(zhǔn)序列排序的運(yùn)算。

?

類似地,枚舉分組也可以對(duì)位訪問(wèn),只是A.enum() 中@1選項(xiàng)是無(wú)效的,只能處理分組式問(wèn)題:


A
1=demo.query("select * from ? EMPLOYEE")
2[AgeGroup1,AgeGroup2,AgeGroup3]
3[?<=35,?>35 && ? ?<=40,?>40]
4=A1.enum(A3,age(BIRTHDAY))
5=A4.new(A2(#):AgeInterval,~.count():Count)

A5計(jì)算出3個(gè)年齡組中員工總數(shù)如下:

SPL 的序號(hào)思維及定位計(jì)算

6 間隔數(shù)列

數(shù)列是一種特殊的集合,它本身是個(gè)集合,可以應(yīng)用各種集合運(yùn)算,同時(shí),它又可以作為序號(hào)用于訪問(wèn)其它序列的子集,靈活運(yùn)用數(shù)列是建立序號(hào)思維的重要環(huán)節(jié),如:


A
1=to(10)
2=to(3,8)
3=A1.step(3,2)
4=20.step(4,2,3)

to() 函數(shù)可以得到由連續(xù)的整數(shù)構(gòu)成的序列,而step() 函數(shù)則可以設(shè)定數(shù)列成員的間隔等參數(shù),A1~A4結(jié)果依次如下:

SPL 的序號(hào)思維及定位計(jì)算? SPL 的序號(hào)思維及定位計(jì)算

SPL 的序號(hào)思維及定位計(jì)算? SPL 的序號(hào)思維及定位計(jì)算

使用子序列在原序列中的位置數(shù)列可以用來(lái)處理子集,如:


AB
1=to(100)/1到100組成的序列
2=A1(100.step(14,7))=0/從14起,7的倍數(shù)賦值為0
3=A1.run(if(~>1,A1(100.step(~,~+~))=0,0))
4=A1.select(~>1)/生成素?cái)?shù)表:將位置為合數(shù)的均賦值為0,只留下素?cái)?shù)
5=100.(rand())/產(chǎn)生100個(gè)隨機(jī)數(shù)
6=A5(to(50))
7=A5(to(51,100))
8>A5(100.step(2,1))=A6
9>A5(100.step(2,2))=A7/對(duì)A5進(jìn)行洗牌,即將前50個(gè)與后50個(gè)成員交替排列

在上面的例子中,可以用數(shù)列來(lái)為原序列賦值,也可以獲取子序列等。

7 序號(hào)數(shù)列

如果對(duì)序列排序,那會(huì)喪失成員的原有次序信息,但有時(shí)這個(gè)信息還要用,比如我們想知道年齡最大的三名員工在全公司的入職次序,某支股票股價(jià)最高的三個(gè)交易日的漲幅,…。

為此,SPL提供了A.psort() 函數(shù),用以返回排序后成員在排序前的序號(hào)。


A
1[c,b,a,d]
2=A1.psort()
3=A1(A2)
4=A1.sort()
5=A3==A4

A2~A5結(jié)果如下:

SPL 的序號(hào)思維及定位計(jì)算? SPL 的序號(hào)思維及定位計(jì)算

SPL 的序號(hào)思維及定位計(jì)算SPL 的序號(hào)思維及定位計(jì)算

通俗地說(shuō),在A.psort() 返回的數(shù)列中,第1個(gè)數(shù)是本次排序應(yīng)當(dāng)排在第1位的成員在原序列的序號(hào),第2個(gè)數(shù)是應(yīng)當(dāng)排在第2位的成員在原序列的序號(hào),…。

用序號(hào)數(shù)列產(chǎn)生的序列,也可以用A.inv() 函數(shù)獲得序號(hào)數(shù)列的逆數(shù)列,來(lái)進(jìn)行回復(fù)操作,如:


A
1[c,b,d,a]
2=A1.sort()
3=A1.psort().inv()
4=A2(A3)
5=A4==A1

A2~A5的計(jì)算結(jié)果如下:

SPL 的序號(hào)思維及定位計(jì)算? SPL 的序號(hào)思維及定位計(jì)算

SPL 的序號(hào)思維及定位計(jì)算 ?SPL 的序號(hào)思維及定位計(jì)算

有了A.psort()和A.inv() 兩個(gè)函數(shù),就可以很方便地解決需要保持原序號(hào)的問(wèn)題:


AB
1=demo.query("select * from EMPLOYEE ?").sort(HIREDATE)
2=A1.psort(BIRTHDAY:-1)/返回A1按生日排序的序號(hào)數(shù)列
3=A2(to(3))/最小的3名員工在A1中的序號(hào)數(shù)列
4=demo.query("select * from ? STOCKRECORDS where STOCKID=000062").sort(DATE)
5=A4.psort(CLOSING:-1)/A4按收盤(pán)價(jià)降序排序后的序號(hào)數(shù)列
6=A5(to(3))/收盤(pán)價(jià)最高的三天記錄在A4中的序號(hào)
7=A6.(A4(~).CLOSING/A4.m@0(~-1).CLOSING-1)/這三天的漲幅,計(jì)算漲幅要用A4中順序
8=A6.(A4.calc(~,(CLOSING-CLOSING[-1])/CLOSING[-1]))/可以用calc函數(shù)簡(jiǎn)寫(xiě)A7中的表達(dá)式

?

在查找數(shù)據(jù)時(shí),使用二分法能夠極大地提高效率,但這種方法要求原序列對(duì)于查找的關(guān)鍵字有序,若原序列無(wú)序則需要先排序。如果是查找成員本身,先排序沒(méi)有問(wèn)題,但要查找成員的序號(hào)時(shí),排序則會(huì)破壞這個(gè)信息,這時(shí)又需要使用A.psort() 函數(shù),如:


AB
1=demo.query("select * from EMPLOYEE ?").sort(HIREDATE)
2=A1.psort(NAME)/A1按姓名排序后的序號(hào)數(shù)列
3=A1(A2)/按姓名排序后的排列
4=A3.pselect@b(NAME:"David")/用二分法查找David在A3中的序號(hào)
5=A2(A4)/David在A1中的序號(hào)

這里用A.psort() 相當(dāng)于為序列建立了一個(gè)二分法查找索引,一個(gè)序列可以同時(shí)按不同關(guān)鍵字建立多個(gè)查找索引。

對(duì)齊分組函數(shù)也可以返回序號(hào)構(gòu)成的數(shù)列而不直接返回對(duì)齊后的序列,如:


AB
1=demo.query("select * from ? SALES").sort(AMOUNT:-1)/訂單按金額降序排序
2[QUICK,ERNSH,HANAR,SAVEA]
3=A1.align@1p(A2,CLIENT)/按A2中的客戶序列對(duì)位分組,返回序號(hào)
4=A3.new(A2(#):NAME,A1(~).AMOUNT: ? Amount,~:Rank)/用A3中的序號(hào)在A1中查找訂單金額和總額排名

8 定位計(jì)算

計(jì)算出了所需記錄的序號(hào),就可以用定位計(jì)算A.calc() 來(lái)計(jì)算所需結(jié)果。使用定位計(jì)算可以避免不必要的計(jì)算,從而提高計(jì)算效率。


A
1=file("VoteRecord")
2=A1.import@b()
3[Califonia,Ohio,Illinois]
4=A2.pselect@a(A3.pos(State)>0)
5=A2.calc(A4,Votes[-1]-Votes+1)

A2,A4和A5中的計(jì)算結(jié)果如下:

SPL 的序號(hào)思維及定位計(jì)算

SPL 的序號(hào)思維及定位計(jì)算? SPL 的序號(hào)思維及定位計(jì)算

在這個(gè)例子中,二進(jìn)制文件VoteRecord中存儲(chǔ)了某次投票的結(jié)果,并已經(jīng)按票數(shù)降序排序。A4計(jì)算出指定州的員工編號(hào)序列。A5根據(jù)編號(hào)序列,計(jì)算出這些員工還需獲得多少票,排名就可以上升。如目前排在第3位的Ryan Williams,需要再獲得69票,排名就可前進(jìn)1位。在計(jì)算中需要跨行處理,這種計(jì)算不能僅根據(jù)選出員工的數(shù)據(jù)完成,還需要原表中的相關(guān)數(shù)據(jù)。


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI