如何从KDB中的列表中删除元素?

时间:2014-04-17 12:23:36

标签: kdb q-lang

例如,我有:

x: (`a`b!(1;2); (); `a`b!(3;4))

我要删除()。我尝试过使用?(匹配)

x[x ? not ()]

但这只是()

什么是正确的表达?

背景

我经常使用peach来执行一系列查询,有些人会以()的形式返回缺失的数据。因此,我想删除()并返回一个漂亮的表。

4 个答案:

答案 0 :(得分:4)

好吧,如果您已经返回表(而不是字典),那么您可以始终只是raze,这足以摆脱空列表。从技术上讲,它是附加的,但是如果在列表中附加一个空列表,则会得到原始列表。回想一下,表格只是一个字典列表,所以这里也是如此。

//I'm enlisting your dictionaries,
//so that they become tables and then raze
q)raze @[x; 0 2; enlist]   
a b
---
1 2
3 4

raze f each xraze f peach x这样的代码段很常见,我怀疑这是最适合您用例的习惯用法。

答案 1 :(得分:2)

()是一个空列表。所以它的数量为零。因此我们可以使用:

q)x where not 0 = count each x
a b
---
1 2
3 4

答案 2 :(得分:2)

你也可以使用以外的东西:

q)x except 1#()
a b
---
1 2
3 4

答案 3 :(得分:0)

一种通用的方法来去除不需要的元素:

q)x where not x~\:()
a b
---
1 2
3 4

q)x where not x~\:`a`b!(1;2)
()
`a`b!3 4