首页 > 解决方案 > KDB Q 中过滤器功能的最简单实现是什么?

问题描述

许多函数式语言都内置了过滤列表中元素的方法。除非我遗漏了什么,否则 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 语言中内置的?

标签: kdb

解决方案


except如果您只考虑列表,则应该是您要查找的关键字。

来自http://code.kx.com/q/ref/select/#except

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

q)1 0 2 3 0 4 except 0
1 2 3 4

推荐阅读