(kdb+/q) 循环遍历两个列表参数(一个在内循环/一个外循环)时如何返回单个组合输出

问题描述 投票:0回答:1

我正在对列表中的 929 个字符串执行字符串搜索。

我正在循环 7 个不同的字符串。

我遇到的问题是如何将输出作为一个返回,而不是为搜索的每个不同字符串返回 7 次。

q){{ss[x;y]}[;x]each exec rd from rdeFunc}each exec v from dToCol
..
q)
q)count {{ss[x;y]}[;x]each exec rd from rdeFunc}each exec v from dToCol
7
q)
q)count each {{ss[x;y]}[;x]each exec rd from rdeFunc}each exec v from dToCol
929 929 929 929 929 929 929
q)
kdb
1个回答
0
投票

ss
返回匹配的起始索引列表

q){{ss[x;y]}[;x]each exec rd from ([] rd:("aa";"bb";"cc";"dd";"ee";"ff"))}each exec v from ([] v:("aa";"cc";"ff"))
,0       `long$() `long$() `long$() `long$() `long$()
`long$() `long$() ,0       `long$() `long$() `long$()
`long$() `long$() `long$() `long$() `long$() ,0

如果您只关心是否有匹配项而不关心它在哪里,那么您可以使用

count

{{count ss[x;y]}[;x]each exec rd from ([] rd:("aa";"bb";"cc";"dd";"ee";"ff"))}each exec v from ([] v:("aa";"cc";"ff"))
1 0 0 0 0 0
0 0 1 0 0 0
0 0 0 0 0 1

那么如果你只关心某些东西是否匹配而不是具体哪个你可以使用

any

any {{count ss[x;y]}[;x]each exec rd from ([] rd:("aa";"bb";"cc";"dd";"ee";"ff"))}each exec v from ([] v:("aa";"cc";"ff"))
101001b

或者

any flip
如果你想以相反的方向遮盖:

any flip {{count ss[x;y]}[;x]each exec rd from ([] rd:("aa";"bb";"cc";"dd";"ee";"ff"))}each exec v from ([] v:("aa";"cc";"ff"))
111b
© www.soinside.com 2019 - 2024. All rights reserved.