你如何过滤或搜索 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
假设我有一个列表
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