2014-04-17 25 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是很常見的,我懷疑這是成語那將是最適合你的使用情況。