例如,我有:
x: (`a`b!(1;2); (); `a`b!(3;4))
我要删除()
。我尝试过使用?
(匹配)
x[x ? not ()]
但这只是()
。
什么是正确的表达?
背景
我经常使用peach
来执行一系列查询,有些人会以()
的形式返回缺失的数据。因此,我想删除()
并返回一个漂亮的表。
答案 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 x
或raze 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