本章介绍pos()函数的多种用法。
描述:
获取序列成员位置序号
语法:
A.pos(x)
备注:
定位成员x在序列A中的位置,x可能在A中重复出现。返回值由选项决定,找不到返回null。
参数:
A |
序列对象或返回序列对象的表达式 |
x |
序列成员 |
选项:
@b |
表示默认A为有序序列,使用二分法查找,递增或者递减均可 |
@a |
返回满足条件的所有结果,因此返回结果是一个n数列 |
@z |
从最后一个成员开始从后往前查找,默认从第一个成员从前往后查找 |
@s |
A中成员有序,在用二分法查找时,当x为A成员时返回其位置;当x非A成员时,返回x按顺序可插入位置序号的相反数。 |
@p |
x是序列,当作单值处理,此时A是序列的序列 |
@n |
找不到序列成员时返回A的长度加1,与@a互斥 |
返回值:
序号,或者由序号组成的序列
示例:
|
A |
|
1 |
=[1,2,8,4,5,6,7,8] |
|
2 |
=A1.pos(8) |
3 |
3 |
=A1.pos@a(8) |
[3,8] |
4 |
=A1.pos@z(8) |
8 |
5 |
=A1.pos@az(8) |
[8,3] |
6 |
=A1.pos@z(9) |
null |
7 |
=[1,2,3,4,5,6,7,8].pos@b(5) |
5 |
8 |
=[1,2,4,5,6,7,8].pos@s(3) |
-3 |
9 |
=[[6,2,1,4,6,3,7,8],[1,4,6]].pos@p([1,4,6]) |
2 |
10 |
=[6,2,1,4,6,3,7,8].pos@n(5) |
9 |
注意:
如果A实际不是有序序列,不能使用@b、@s这个选项,会导致返回的结果不正确. 例如:
[7,6,1,2,3].pos@b(3) |
返回空 |
相关概念:
描述:
获取序列中成员在另一个序列中的位置
语法:
A.pos(x)
备注:
x是序列,返回数列p使A(p)==x,找不到返回空
参数:
A |
序列 |
x |
序列 |
选项:
@i |
返回单递增数列p使A(p)==x |
@c |
返回序列x在A中第一次出现的位置。以便求序列A中子序列x出现的位置,若x不是A的子序列则返回空。 |
@b |
表示默认A为有序序列,使用二分法查找,递增或者递减均可 |
返回值:
单递增数列或数列
示例:
[6,2,1,4,6,3,7,8].pos@i([1,4,6]) |
[3,4,5], 此时返回的是单递增数列 |
[6,2,1,4,6,3,7,8].pos([1,4, 6]) |
[3,4,1], 此时返回的是数列 |
[1,2,3,4,6,7,8].pos@b([3,1,4,6]) |
[3,1,4,5] |
[2,1,4,6,3,7,8].pos@i([8,4,6]) |
null |
[2,1,4,6,3,7,8,4,6,1].pos@c([4,6]) |
[3] |
相关概念:
描述:
查找母串中子串的位置
语法:
pos(s1, s2{, begin})
备注:
查找母串s1中起始位置为begin的子串s2的位置,找不到返回null。
参数:
s1 |
待查找子串的母串 |
s2 |
被查找的子串 |
begin |
查找的起始位置,缺省为1 |
返回值:
整型
选项:
@z |
由begin开始往前查找,缺省从begin开始往后查找 |
示例:
pos("abcdef","def") |
4 |
pos("abcdefdef","def",5) |
7 |
pos("abcdef","defa") |
(null) |
pos@z("abcdeffdef","def",7) |
4 |
pos("abcdeffdef","def",7) |
8 |