2014-04-17 17 views
2

举例来说,我有:如何从KDB列表中删除元素?

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

,我想删除()。我一直在使用?(比赛)

x[x ? not()] 

尝试,但只是给()

什么是正确的表达?

背景

我经常使用peach执行一系列的查询,往往有些人会在()的形式返回丢失的数据。因此,我想删除()并返回到一个不错的表格。

回答

2

可以除了如用:

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

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

q)x where not 0 = count each x 
a b 
--- 
1 2 
3 4 
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是很常见的,我怀疑这是成语那将是最适合你的使用情况。