假设我有以下两个列表:
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
?
答案 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