通常我必须使用全局变量结果联合连接来附加一些数据。
res();
{[someVar]
res,:: select x from y where (constraints related to someVar)
} each list of someVars
这不是非常实用的风格。有没有不同的方法来实现这个w / o全局变量?
答案 0 :(得分:4)
有几点:
当您正在进行追加就地(又称a,:b
而不是a::a,b
)时,您不需要全局指定双冒号。在这种情况下,单个将起作用,因为就地附加在全局上下文中起作用。
即使它不是“功能性的”并且使用全局上下文,你也会忽略这样一个事实,即追加即使在内存方面非常有效。例如:
q)\ts t:([]col1:10000000?100j)
110 134218192
q)\ts a:{x,select from y}/[t;2 cut ([]col1:til 6)]
74 268436720
q)\ts {t,:x} each 2 cut ([]col1:til 6)
0 1424
q)a~t
1b
使用over(/)并避免全局变量的迭代方法会创建表的副本,从而使内存使用量翻倍。就地附加使用非常少的内存来获得相同的结果。
所以最终在某些情况下,让全局变得有价值,取决于具体情况。
答案 1 :(得分:2)
res:(),/{[someVar]
select x from y where (constraints related to someVar)
} each someVars
将获取返回表的列表,并使用over副词(/)
将它们连接回res