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

说我有一个清单

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

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

(`a;`ac;`af)

我该怎么办呢?

如果我尝试使用

list where each list like "*c*"

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

谢谢

回答(2)

2 years ago

你的方法几乎就在那里 - like 适用于平面列表,但需要告诉你对左参数的每个元素进行操作:

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

然后,您可以使用 where each 并将每个元素( ' )应用回初始列表的每个元素:

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

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

2 years ago

当你正在寻找任何事件时,似乎你不关心这个位置,你可以在这里使用 raze . 它可以为您提供所需的结果 .

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