x-.y交叉怎么样?

时间:2016-10-22 16:40:19

标签: j

beforeEach(function () { jasmine.addMatchers({ toReport: function () { return { compare: function (actual, expected, msg) { var result = {pass: actual == expected}; result.message = msg; return result; } } } }); }); 包括x的所有项目,除了那些是y的单元格 但是,如果我想获得所有x和y单元格的项目呢?

我可以做到这一点
x-.y

但它需要两次运行昂贵的操作。 有更好的解决方案吗?

2 个答案:

答案 0 :(得分:4)

使用集合时,

e.通常很有用。

x e. y

给出了匹配列表:

  

对于每个x项返回1,如果它存在于" set" y,0否则。

1 2 3 4 e. 5 9 2
0 1 0 0

然后,

x (e. # [) y

选择两个列表中都存在的元素。

1 2 3 4 (e. # [) 5 9 2
2
5 8 (e. # [) i.12
5 8

答案 1 :(得分:3)

执行-.两次是在J.中实现交集的经典方法。

低效率是次要的(一个恒定的因素 - 而且,一般来说,你不应该关注J中的效率问题,除非它们超过2倍 - 当你遇到资源问题时,你通常会想要关注因素为1000或更高的问题)。

换句话说,如果([-.-.)-.^:2对您来说太慢,那么-.对您来说也会太慢。 (这可能发生在底层实现效率低下的极大数据集上。最近版本的J已经完成了一些工作,以纠正这个问题。)

令人失望,也许是实际的。