(q / kdb +)如果两个数字相等,则将一对中的左数字替换为零

时间:2018-11-13 21:20:55

标签: kdb

有例子

(7.5 7.5;5.1 5.5;0.0 3.0;1.0 1.0)

index   value
0   7.5 7.5
1   5.1 5.5
2   0 3f
3   1 1f

如果两个数字相等,如何将每对左边的数字替换为零?

示例输出

index   value
0   0 7.5
1   5.1 5.5
2   0 3f
3   0 1f

谢谢

3 个答案:

答案 0 :(得分:4)

一个简单的方法是使用each副词。

{$[x[0]=x[1];0,x[1];x]} each (7.5 7.5;5.1 5.5;0.0 3.0;1.0 1.0)

此处,左侧的if / else函数获取两个项目列表,并返回列表,如果两个项目都匹配,则用0替换第一项目。每个副词将此功能分别应用于列表中的每对数字。

答案 1 :(得分:4)

您也可以在向量上使用点修改

q)a:(7.5 7.5;5.1 5.5;0.0 3.0;1.0 1.0)
q){.[x;(where (=) . flip x;0);:;0f]} a
0   7.5
5.1 5.5
0   3
0   1

答案 2 :(得分:3)

{(x[;0]*not x[;0]=x[;1]),'x[;1]} value

此功能应在列表长度很大时保持良好的性能