本章节介绍pselect()函数的用法。
描述:
获取成员序列位置
语法:
A.pselect( x) |
|
A.pselect(x1:y1,x2:y2,......xi:yi) |
多个条件用"&&"组合查询时的简化写法 相当于A.pselect(x1==y1 && x2==y2 &&...... xi==yi) |
备注:
返回满足条件x的成员序号,返回值由选项决定,找不到返回空序列或null。
参数:
A |
序列 |
x |
布尔表达式,可以为null ,使用@b选项时,x为返回结果为整数的表达式 |
xi:yi |
xi为表达式,yi为比较值 |
选项:
@a |
返回满足条件x的所有成员序号组成的序列,否则仅返回第一个成员序号 |
@z |
从最后一个成员开始从后往前查找,默认从第一个成员从前往后查找 |
@b |
默认A为有序序列,使用二分法查询。注意:xi必须全升序或全降序。如果A不是有序序列,使用此参数时结果有误。@b选项可用于A.pselect(x1:y1,x2:y2,......xi:yi)中,即选出cmp(x,y)返回值为0的成员,此时不用写cmp(),直接写为:A.pselect@b(x1:y1,x2:y2,......xi:yi); |
@s |
A中成员对于表达式x有序,在使用二分法查找时,如果A中的任何成员都无法使表达式x的计算结果为0,那么返回满足条件的数值可插入位置的相反数。 |
@n |
找不到序列成员时返回A的长度加1,与@a互斥 |
返回值:
使得表达式x的结果为真,或者表达式x的结果等于y的成员在序列中的位置,使用@a选项返回成员位置所组成的序列,当x为null时,返回由成员序号组成的序列。
示例:
|
A |
|
1 |
[2,5,4,3,2,9,4,9,3] |
|
2 |
=A1.pselect(~>4) |
2 |
3 |
=A1.pselect@a(~>4) |
[2,6,8] |
4 |
=A1.pselect@z(~>4) |
8 |
5 |
=A1.pselect@az(~>4) |
[8,6,2] |
6 |
=[1,3,5,7,9].pselect@b(~-5) |
3, A8和A9的写法等价,返回值一样 用冒号时,@b不需要更改写法. |
7 |
=[1,3,5,7,9].pselect@b(~:5) |
|
8 |
=[1,3,5,7,9].pselect@s(~:4) |
-3, 找不到4,返回可插入位置的相反数 |
9 |
=[1,3,5,7,9].pselect@n(~:4) |
6 |
10 |
=demo.query("select * from EMPLOYEE") |
|
11 |
=A10.pselect(GENDER:"M",DEPT:"Sales") |
6 |
12 |
=demo.query("select * from EMPLOYEE where GENDER='M' order by EID asc") |
EID和GENDER同序 |
13 |
=A12.pselect@b(EID:10,GENDER:"M") |
2 |
14 |
=A12.pselect@s(EID:3,GENDER:"M") |
-1,找不到EID=3并且GENDER为M的记录,返回可插入位置的相反数 |
15 |
=A12.pselect@n(EID:3,GENDER:"M") |
239 |
注意:
使用@b、@s选项时A必须是有序序列,并且xi全升序或全降序。否则使用此参数会导致结果不正确。