pselect()

阅读(3252) 标签: 成员序列, 位置,

本章节介绍pselect()函数的用法。

A.pselect()

描述:

获取成员序列位置。

语法:

A.pselect(x,k)

有参数k时从第k个成员开始寻找。

A.pselect(x1:y1,x2:y2,......xi:yi)

多个条件用"&&"组合查询时的简化写法,相当于A.pselect(x1==y1 && x2==y2 &&...... xi==yi)

备注:

获取成员在序列A中的位置,返回满足条件x的成员序号,返回值由选项决定,找不到返回空序列或null

参数:

A

序列。

x

布尔表达式,可以为null,使用@b选项时,x为返回结果为整数的表达式。

k

从第k个成员开始寻找。

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互斥。

@0

找不到返回0,与@n互斥。

返回值:

使得表达式x的结果为真,或者表达式x的结果等于y的成员在序列中的位置;使用@a选项返回成员位置所组成的序列;当xnull时,返回由成员序号组成的序列。

示例:

 

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, A6A7的写法等价,返回值相同。

7

=[1,3,5,7,9].pselect@b(~:5)

用冒号时,@b不需要更改写法。

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")

EIDGENDER同序。

13

=A12.pselect@b(EID:10,GENDER:"M")

2

14

=A12.pselect@s(EID:3,GENDER:"M")

-1,找不到EID3并且GENDERM的记录,返回可插入位置的相反数。

15

=A12.pselect@n(EID:3,GENDER:"M")

239

16

=[2,5,4,3,2,9,4,9,3].pselect(~>4,3)

6

17

=[2,5,4,3,2,9,4,9,3].pselect@0(~>9)

0

注意:

使用@b@s选项时A必须是升序序列,并且xi全升序。否则使用此参数会导致结果不正确。

相关概念:

A.select()