KDB中是否有一个等于“ inter”的“ outer”或“ exclusive or”运算符?

Jej*_*ort 3 list xor kdb

假设我有以下两个列表:

 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)

Kev*_*are 9

该操作except将为您提供一个列表中不属于另一个列表的元素。

但是,在您的情况下x except y,只会给`c`dy 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)

如果要获取所有排他元素的列表。

问候,凯文


Cal*_*ggs 5

从凯文的答案来看,第一个将给出重复项(如果重复出现),最后一个将给出不同的列表。要按照要求使用函数中缀,您需要在.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)