pselect()

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

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

A.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选项返回成员位置所组成的序列,当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, A8A9的写法等价,返回值一样

用冒号时,@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")

EIDGENDER同序

13

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

2

14

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

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

15

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

239

注意:

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

相关概念:

A.select()