find

语法

find(X, Y)

参数

X 可以是向量、字典、单列内存表、键值表或者索引内存表。

Y 可以是标量、向量、矩阵、元组、字典、表。

详情

若X是向量,对Y中每一个元素,返回其第一次出现在X中的位置;如果没有在X中出现,返回 -1。若要查找所有出现的位置,可使用 at 函数 。

若X是字典,对Y中每一个元素,若其为X的键,返回X中对应的值;若不是X的键,返回NULL。

若X是单列内存表,对Y中每一个元素,返回其第一次出现在X的唯一列中的位置;如果没有在X的唯一列中出现,返回-1。注意:表中单列的类型不能是 Array Vector。

若X是键值内存表或索引内存表,对Y中每一个元素,返回其第一次出现在X的主键中的位置; 如果没有在X的主键中出现,返回 -1。

通过 find 函数,用一个大向量搜索另一个大向量时,系统将建立一个字典,用以优化性能。但如果只是用几个值搜索一个向量,系统可能不会为了优化性能建立字典。是否建立字典是动态决定的。如果需要在已经排序的向量中搜索少量数据,我们推荐使用 binsrch 函数。

例子

X是向量:

$ find(7 3 3 5, 3);
1

$ at(7 3 3 5 == 3);
[1,2]

$ (7 3 3 5 6).find(2 4 5);
[-1,-1,3]

X是字典:

$ z=dict(1 2 3,4.5 6.6 3.2);
$ z;
3->3.2
1->4.5
2->6.6

$ find(z,3);
3.2
$ find(z,5);
00F

X是单列内存表:

$ t = table(1 3 5 7 9 as id)
$ find(t, 2 3)
[-1,1]

X是键值表或者索引内存表:

$ kt = keyedTable(`name`id,1000:0,`name`id`age`department,[STRING,INT,INT,STRING])
$ insert into kt values(`Tom`Sam`Cindy`Emma`Nick, 1 2 3 4 5, 30 35 32 25 30, `IT`Finance`HR`HR`IT)
$ find(kt,(`Emma`Sam, 4 1));
[3,-1]

$ t1 = indexedTable(`sym`side, 10000:0, `sym`side`price`qty, [SYMBOL,CHAR,DOUBLE,INT])
$ insert into t1 values(`IBM`MSFT`GOOG, ['B','S','B'], 10.01 10.02 10.03, 10 10 20)
$ find(t1, (`GOOG`MSFT, ['B','S']))
[2,1]