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