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

How do you filter or search a nested list in q

假设我有一个列表

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

我想搜索所有像 a 这样的符号来给

(`a;`ac;`af)

我该怎么做?

如果我尝试使用

list where each list like "*c*" 

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

谢谢

您的方法就差不多了 - like 可以很好地处理平面列表,但需要被告知对左侧参数的每个元素进行操作:

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

然后您可以使用 where each 并使用 each-both ('):

应用回初始列表的每个元素
q)list@'where each list like\:"*c*"
`symbol$()
,`ac
`symbol$()

此 returns 仅匹配每个元素中 like 正确参数的元素,因此返回空列表。

由于您正在寻找 any 出现并且似乎您不关心位置,因此您可以在此处使用 raze。它会给你想要的结果。

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