假设我有以下两个列表:
x : `a`b`c`d;
y : `a`b`e`f;
Run Code Online (Sandbox Code Playgroud)
对于交叉路口,有inter运营商:
q)x inter y
`a`b
Run Code Online (Sandbox Code Playgroud)
是否有类似的运算符来做EXCLUSIVE OR这样的事情,我会得到:
q)x outer y
`c`d`e`f
Run Code Online (Sandbox Code Playgroud)
?
该操作except将为您提供一个列表中不属于另一个列表的元素。
但是,在您的情况下x except y,只会给`c`d和y except x只会给`e`f。
因此,您可以使用其中任何一个;
q)(x except y),y except x
`c`d`e`f
Run Code Online (Sandbox Code Playgroud)
要么
q)(x union y) except (x inter y)
`c`d`e`f
Run Code Online (Sandbox Code Playgroud)
或者不使用 except
q)where(count each group (distinct x), distinct y)=1
`c`d`e`f
Run Code Online (Sandbox Code Playgroud)
如果要获取所有排他元素的列表。
问候,凯文
从凯文的答案来看,第一个将给出重复项(如果重复出现),最后一个将给出不同的列表。要按照要求使用函数中缀,您需要在.q命名空间中定义函数
q).q.outer:{(x union y) except (x inter y)}
q)x outer y
`c`d`e`f
Run Code Online (Sandbox Code Playgroud)