如何在不使用全局变量的情况下使用投影进行循环



有一个包装器函数,希望使用该函数继续删除,但我认为只适用于记录。

以下是功能:

testFunc1:{
tab:([]a:`1`1`3`1`2;b:2 4 6 8 10);
tab2:update rowNumber:i from tab;
filter:select from tab2 where a = `1;
if [ ((count filter) > 0); tab2:raze .rm.tab[;tab2;filter] each til count filter];
tab:delete rowNumber from tab2;
tab
}
.rm.tab:{[x;tab;filter]
row:exec rowNumber[x] from filter;
if[(count tab) > 0; newTab: delete from tab where i = row];
:newTab
}

这个想法是在testFunc1中有tab,并将其返回为.rm.tab正在逐个删除记录。我认为.rm.tab中有一个错误,如果只有一条记录,它可以正常工作,但如果过滤器中有4条记录用于循环,输出将返回四次。

不确定如何在不使用全局变量的情况下修复.rm.tab

这就是您想要的吗?我已经删除了CCD_ 6,其中CCD_;在CCD_ 9内部使用CCD_。

代码

testFunc1:{
tab:([]a:`1`1`3`1`2;b:2 4 6 8 10);
tab2:update rowNumber:i from tab;
filter:select from tab2 where a=`1;
if[(count filter)>0;tab2:.rm.tab[;tab2;filter]til count filter];
:delete rowNumber from tab2;
}
.rm.tab:{[x;tab;filter]
row:exec rowNumber[x]from filter;
if[(count tab)>0;newTab:delete from tab where any i=/:row];
:newTab;
}

结果

q)testFunc1[]
a b
----
3 6
2 10

最新更新