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

时间:2019-06-26 09:55:54

标签: list xor kdb

假设我有以下两个列表:

 x : `a`b`c`d;
 y : `a`b`e`f;

对于交点,有inter运算符:

q)x inter y
`a`b

是否有类似的运算符来执行EXCLUSIVE OR,使我得到:

q)x outer y
`c`d`e`f

2 个答案:

答案 0 :(得分:9)

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

但是,在您的情况下,x except y仅给出`c`d,而y except x仅给出`e`f

因此您可以使用其中一个;

q)(x except y),y except x
`c`d`e`f

q)(x union y) except (x inter y)
`c`d`e`f

或者不使用except

q)where(count each group (distinct x), distinct y)=1
`c`d`e`f

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

Kevin

答案 1 :(得分:5)

从凯文(Kevin)的答案中,第一个将给出重复项(如果其中一个重复出现),最后一个将给出不同的列表。要根据需要使用函数中缀,您需要在.q命名空间中定义函数

q).q.outer:{(x union y) except (x inter y)}
q)x outer y
`c`d`e`f