例如,我有:
x: (`a`b!(1;2); (); `a`b!(3;4))
我想删除()
. 我试过使用?
(匹配)
x[x ? not ()]
但这只是给出()
。
正确的表达方式是什么?
背景
我经常peach
用来执行一系列查询,而且经常有一些会以()
. 因此,我想删除()
并回到一张漂亮的桌子上。
好吧,如果您已经返回表格(而不是字典),那么您总是可以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 x
或之类的片段raze f peach x
非常常见,我怀疑这是最适合您的用例的习语。
您也可以使用 except :
q)x except 1#()
a b
---
1 2
3 4
() 是一个空列表。所以它的计数为零。因此我们可以使用:
q)x where not 0 = count each x
a b
---
1 2
3 4
摆脱不需要的元素的更通用的方法:
q)x where not x~\:()
a b
---
1 2
3 4
q)x where not x~\:`a`b!(1;2)
()
`a`b!3 4