我有一张桌子
t: flip `ref`a`b`c`d`e!(til 10;10?10;10?10;10?10;10?10;10?10)
ref a b c d e
0 5 3 3 9 1
1 1 9 0 0 0
2 5 9 4 1 7
3 0 0 5 1 3
4 2 6 8 9 3
5 3 2 0 6 6
6 7 6 4 9 8
7 4 8 9 7 2
8 7 0 8 8 3
9 7 9 0 4 8
如果它们的值等于列ref中的值而不必为每列进行单行更新,如何将a,b,c,...列中的所有值都设置为0Ni?
所以有点像(返回ERROR:type)
{update x:?[x=t;0Ni;x] from t} each `a`b`c`....
答案 0 :(得分:2)
您可以重复使用下一个代码段
t: flip `ref`a`b`c`d`e!(til 10;10?10;10?10;10?10;10?10;10?10);
columns: `a`b`c`d`e;
![t;();0b;columns!{parse "?[",x,"=ref;0Ni;",x,"]" }each string columns]
更新列放在columns
列表中。
使用
X
映射到值?[x=ref;0Ni;x]
答案 1 :(得分:2)
之前的答案涉及使用字符串,这通常会变得非常混乱。为避免这种情况,可以通过将列名称作为符号来代替来构建查询。可以使用以下函数构建功能选择的字典:
q){y!enlist[({?[y=x;0Ni;y]};x)],/:y:(),y}[`ref;`a`b`c]
a| ({?[y=x;0Ni;x]};`ref) `a
b| ({?[y=x;0Ni;x]};`ref) `b
c| ({?[y=x;0Ni;x]};`ref) `c
初始列为x
,它允许将任意数量的列作为y
传递以进行比较。
然后可以将其添加到功能选择中:
q)![t;();0b;{y!enlist[({?[y=x;0Ni;y]};x)],/:y:(),y}[`ref;`a`b`c]]
ref a b c d e
-------------
0 4 5 8 4 8
1 2 6 9 1
2 8 4 7 2 9
3 0 1 2 7 5
4 5 3 0 4
5 8 3 1 6
6 5 7 4 9 6
7 2 8 2 2 1
8 2 7 1 8
9 6 1 8 8 5