KDBQ中最简单的过滤器函数实现是什么?

KDBQ中最简单的过滤器函数实现是什么?,kdb,Kdb,许多函数式语言都有内置的方法来定义列表中的元素。除非我遗漏了什么,否则Q似乎没有任何这样的内置方法。这让我感到惊讶,因为过滤器在许多函数式语言中都是一个重要的高阶函数 假设我想过滤掉列表1 0 2 3 0 4中的所有0。筛选后的结果列表应为1 2 3 4。目前,我通过以下方式在Q中实现了这一点: raze{eval(?;(not;(=;x;0));x;())}peach 1 0 2 3 0 4 这为我提供了所需的结果,但在确定所发生的一切都是过滤器时,阅读起来有点不方便 我可以用它创建我自己的

许多函数式语言都有内置的方法来定义列表中的元素。除非我遗漏了什么,否则Q似乎没有任何这样的内置方法。这让我感到惊讶,因为过滤器在许多函数式语言中都是一个重要的高阶函数

假设我想过滤掉列表1 0 2 3 0 4中的所有0。筛选后的结果列表应为1 2 3 4。目前,我通过以下方式在Q中实现了这一点:

raze{eval(?;(not;(=;x;0));x;())}peach 1 0 2 3 0 4
这为我提供了所需的结果,但在确定所发生的一切都是过滤器时,阅读起来有点不方便


我可以用它创建我自己的过滤函数,但我想知道是否有我遗漏的东西。有没有一种传统的方法来过滤语言中内置的Q?

,如果您只考虑列表,则除此之外
应该是您要查找的关键字

发件人:

返回列表x中不是列表或原子y的所有项


除非
应该是您要寻找的关键字,如果您只考虑列表的话

发件人:

返回列表x中不是列表或原子y的所有项


如果您想使用通配符进行模式搜索,那么您可能需要像使用一样使用

例如,获取以
6结尾的所有元素

q)l2:("a01";"b02";"c03";"f06";"z26") 
q)l2 where l2 like "*6"
("f06";"z26")
说明:
1) 搜索以
6
结尾的字符串
like
将返回布尔向量

q)l2 like "*6"          
00011b
2) 现在获取索引
,其中
向量元素为
true

q)where l2 like "*6"
3j, 4j
3) 获取找到匹配项的元素

q)l2 where l2 like "*6"
("f06";"z26")

如果您想使用通配符进行模式搜索,那么您可能需要像使用
一样使用

例如,获取以
6结尾的所有元素

q)l2:("a01";"b02";"c03";"f06";"z26") 
q)l2 where l2 like "*6"
("f06";"z26")
说明:
1) 搜索以
6
结尾的字符串
like
将返回布尔向量

q)l2 like "*6"          
00011b
2) 现在获取索引
,其中
向量元素为
true

q)where l2 like "*6"
3j, 4j
3) 获取找到匹配项的元素

q)l2 where l2 like "*6"
("f06";"z26")

有一些由Aaron Davies编写的过滤器函数的实现,可能对不同的用例有用

一个例子:


q) filter[1有一些由Aaron Davies编写的filter函数的实现,可能对不同的用例有用

一个例子:


q) 滤器[1这绝对是针对我的特定示例的最佳解决方案,我也曾在该案例中使用过。我选择nyi的答案,因为它最简洁地适用于一般过滤案例。这绝对是针对我的特定示例的最佳解决方案,我也曾在该案例中使用过。我选择nyi的答案,因为它最简洁地适用于一般过滤案例。