我们在当前名称空间中有3个表,其中各列的下方是
q)t:([] a:`a`b`c; b:1 2 3);
q)s:([] a:`a`b`c; b:1 2 3);
q)z:([] z:`a`b`c; b:1 2 3);
现在我们要搜索并打印所有具有a列的表。
Expected output: `a`s
我有两个比较丑陋的解决方案,
q){$[`a in cols x;x;]} each tables[];
q){(enlist x) where enlist(`a in cols x)}each tables[];
但是正在寻找更好的最佳解决方案。
答案 0 :(得分:3)
如果这是您要参数化的东西,然后再次使用,则可能会使用以下投影:
f:{[t;c]c!t@/:where each flip(c,:())in/:cols each t}[tables[]];
此函数产生以下输出
q)f`a
a| s t
q)f`a`b
a| `s`t
b| `s`t`z
因此它将列名映射到包含该列的表的列表。 这种映射通常比使用简单列表更有利,因为它允许快速,清晰的索引编制。
q)coldict:f`a`b
q)coldict[`a]
`s`t
答案 1 :(得分:2)
最好将each right (/:)副词与in
一起使用:
q)tables[] where `a in/: cols each tables[]
`s`t