3

例如,我有:

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

我想删除(). 我试过使用?(匹配)

x[x ? not ()]

但这只是给出()

正确的表达方式是什么?

背景

我经常peach用来执行一系列查询,而且经常有一些会以(). 因此,我想删除()并回到一张漂亮的桌子上。

4

4 回答 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 x或之类的片段raze f peach x非常常见,我怀疑这是最适合您的用例的习语。

于 2014-04-21T13:13:01.980 回答
2

您也可以使用 except :

q)x except 1#()
a b
---
1 2
3 4
于 2014-04-17T13:22:41.493 回答
2

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

q)x where not 0 = count each x
a b
---
1 2
3 4
于 2014-04-17T13:15:28.873 回答
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
于 2018-09-02T09:10:06.093 回答