首页 文章

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

提问于
浏览 580
1

说我有一个清单

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

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

(`a;`ac;`af)

我该怎么办呢?

如果我尝试使用

list where each list like "*c*"

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

谢谢

2 回答

  • 6

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

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

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

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

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

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

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

相关问题