如何在q中过滤或搜索嵌套列表

时间:2018-08-19 14:51:05

标签: kdb

说我有一个清单

list:(`a`b;`ac`d;`e`af)

我想搜索所有要提供的符号,例如a

(`a;`ac;`af)

我该怎么办?

如果我尝试使用

list where each list like "*c*" 

(没有一个都适用于平面列表)我遇到了type错误

谢谢

2 个答案:

答案 0 :(得分:4)

您的方法即将来临-like在平面列表上可以很好地工作,但是需要告诉您对左参数的每个元素进行操作:

q)list like\:"*c*"
00b
10b
00b

然后,您可以使用where each并分别应用到{')的初始列表的每个元素上:

q)list@'where each list like\:"*c*"
`symbol$()
,`ac
`symbol$()

这仅返回与每个元素中的like右参数匹配的元素,因此返回了空列表。

答案 1 :(得分:2)

在寻找任何事件时,似乎您并不在乎位置,可以在此处使用raze。它会为您提供所需的结果。

q)list:(`a`b;`ac`d;`e`af)
q){r where (r:raze x) like y}[list;"a*"]
`a`ac`af