我想检查APL中的2个向量是否相同。现在我使用以下解决方案(逐个元素比较,对元素求和并与向量a
的大小进行比较):
a←1 2 3
b←1 2 3
(+/a=b)=⍴a ⍝ it needs to return 0 or 1
是否有更快或更惯用的解决方案?
答案 0 :(得分:6)
你可以使用match函数来比较它的整个参数而不是equals,它是一个比较每个参数元素的标量函数:
a←1 2 3
b←1 2 3 4 5
c←1 2 3
a≡b
0
a≡c
1
答案 1 :(得分:1)
如上所述,匹配原语如果参数完全相同则返回1。这意味着它们具有完全相同的等级,形状,数据类型和内容。在少数情况下,匹配将返回假阴性,因为数据类型问题(除法导致浮点表示,即使它在整数的比较容差内),或者因为缩放器将不匹配1元素向量。
^ / A = B
如果测试的所有元素都等于b的相应元素,则将返回1,但如果a和b的长度不同,它将失败并返回LENGTH错误,并且它将使用scaler扩展,因此如果a为1 11和b是缩放器1,结果为1。
匹配通常更好,对大型阵列也更有效。