本章介绍pos()函数的多种用法。
描述:
获取序列成员位置序号。
语法:
A.pos(x,k)
备注:
定位成员x在序列A中的位置,x可能在A中重复出现。返回值由选项决定,默认返回第一个出现的位置,找不到则返回null。有参数k时从第k个成员开始寻找。
参数:
A |
序列对象或返回序列对象的表达式。 |
x |
序列成员。 |
k |
从第k个成员开始寻找。 |
选项:
@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 |
11 |
=[6,2,1,4,6,3,7,8].pos(6,3) |
5 |
注意:
如果A不是有序序列,不能使用@b、@s这个选项,会导致返回的结果不正确,例如:[7,6,1,2].pos@b(3)返回空。
相关概念:
描述:
获取序列成员在另一个序列中的位置。
语法:
A.pos(x)
备注:
获取序列x中所有成员在另一个序列A中的位置,找不到返回空。
参数:
A |
序列 |
x |
序列 |
选项:
@i |
获取单递增数列。 |
@c |
获取序列A中连续子序列x第一次出现的位置。 |
@b |
默认A为有序序列,使用二分法查找,递增或者递减均可。 |
返回值:
数列
示例:
[6,2,1,4,6,3,7,8].pos([1,4, 6]) |
[3,4,1],获取序列[1,4,6]的成员在序列[6,2,1,4,6,3,7,8]中的第1次出现的位置组成的数列。 |
[6,2,1,4,6,3,7,8].pos([1,4, 9]) |
null,序列[1,4, 9]的成员9在序列[6,2,1,4,6,3,7,8]中找不到,所以返回结果为null。 |
[6,2,1,4,6,3,7,8].pos@i([1,4,6]) |
[3,4,5],获取序列[1,4,6]的成员在序列[6,2,1,4,6,3,7,8]中的位置组成的数列,使用@i选项,要求获取的数列为单递增数列。 |
[6,2,1,4,6,3,7,8].pos([3,6,4]) |
[6,1,4] |
[6,2,1,4,6,3,7,8].pos@i([3,6,4]) |
null,使用@i选项,由于序列[6,2,1,4,6,3,7,8]中不存在位置为单递增数列的子序列[3,6,4],所以返回结果为null。 |
[2,1,4,6,3,7,8,4,6,1].pos@c([4,6]) |
3,获取 [2,1,4,6,3,7,8,4,6,1]中连续子序列[4,6],第一次出现的位置 |
[1,2,3,4,6,7,8].pos@b([3,1,4,6]) |
[3,1,4,5],[1,2,3,4,6,7,8]为有序序列,可使用二分法查找 |
相关概念:
描述:
查找母串中子串的位置。
语法:
pos(s1, s2{, begin})
备注:
查找母串s1中起始位置为begin的子串s2的位置,找不到返回null。
参数:
s1 |
待查找子串的母串。 |
s2 |
被查找的子串。 |
begin |
查找的起始位置,缺省为1。 |
返回值:
整型
选项:
@z |
由begin开始往前查找,缺省从begin开始往后查找。 |
@c |
大小写不敏感。 |
@h |
只比头部,忽略begin。 |
@q |
引号内的跳过。 |
@w |
仅查找整词。 |
示例:
pos("abcdef","def") |
4 |
pos("abcdefdef","def",5) |
7 |
pos("abcdef","defa") |
(null) |
pos@z("abcdeffdef","def",7) |
4 |
pos("abcdeffdef","def",7) |
8 |
pos@c("abcdef","Def") |
4,使用@c选项大小写不敏感。 |
pos ("a'b'cbe","b") |
3 |
pos@q("a'b'cbe","b") |
6,使用@q选项引号内的跳过。 |
pos("aab,aa","aa") |
1 |
pos@w("aab,aa","aa") |
5,使用@w选项仅查找整词。 |
pos@h("abcdef","abc",3) |
1,使用@h选项,只比头部,即从参数s1的第一个字符位置开始查找,忽略参数begin。 |