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

Kdb 如何在不使用全局变量的情况下使用投影进行循环?,kdb,Kdb,有一个包装器函数,希望使用该函数不断删除,但我认为只适用于记录 以下是功能: 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:de

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

以下是功能:

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`中有一个bug,如果只有一条记录可以正常工作,但是如果过滤器中有4条记录用于循环,输出将返回四次

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


谢谢这就是你要找的吗?我已经删除了
每个
,其中
.rm.tab
.rm.tab
中被调用和使用
/:
(每个右键)

代码

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

您是否可以共享您期望的来自
testFunc1[]
的预期输出?因此它将从行号中删除a=`1的所有记录。然后输出其余的。我认为解决方案是tab2:distinct raze.rm.tab[;tab2;filter]each til count filter],但这是先输出,然后是distinct。想知道是否有更好的循环解决方案-为循环存储每个结果是否需要循环?您可以只使用
.rm.tab[;tab2;filter]直到count filter
,然后更改
如果[(count tab)>0;newTab:delete from tab where any i=/:row]
中的
。rm.tab
为什么它不像
delete from tab where a=`1
那么简单?过滤器只是一个示例,它将与我函数中的其他内容进行比较