让我们假设我有下表.
t:([]date:5#.z.D; ric:`A.HK`B.HK`C.HK`D.KS`E.T);
Run Code Online (Sandbox Code Playgroud)
从这里,我想删除尾随字符串,包括"." 如果满足某些条件.
以下是我一直在做的方式 - 但我想知道是否会有更高效/更快的方式.
newriclist: exec distinct ric from t;
dummy:{ (`ric`newric)!(x; `$ssr[string[x]; ".KS"; ""]) } each newriclist;
t lj `ric xkey dummy ...
Run Code Online (Sandbox Code Playgroud)
或者,这是我想要理想地实现的目标,但它似乎不起作用.
update ric:?[string[ric] like "*.KS"; `$ssr[string[ric]; ".KS"; ""]; ric] from `t;
Run Code Online (Sandbox Code Playgroud)
使用上面的表格,你可以做到:
q)update first each ` vs/:ric from `t where ric like "*.KS"
`t
q)t
date ric
---------------
2018.02.24 A.HK
2018.02.24 B.HK
2018.02.24 C.HK
2018.02.24 D
2018.02.24 E.T
Run Code Online (Sandbox Code Playgroud)
对于一些解释,这使用了您可以做的事实
q)` vs `sym.suf
`sym`suf
Run Code Online (Sandbox Code Playgroud)
将你的syms分解为虚线组件而不必串.这需要每个right(/:)应用以对受影响的列元素进行操作.这将返回一个列表列表,因此first each需要将其转换回一个简单的列表.where这里的条件是确保它只在正确的syms上运行.
作为一个快速扩展,如果你在一个包含大量重复syms的大表中这样做,使用.Q.fu将更有效地操作列表中的多个重复项:
update .Q.fu[{first each ` vs/:x};ric] from `t where ric like "*.KS"
Run Code Online (Sandbox Code Playgroud)