问题描述
-
什么是(!)。在kdb中调用过?
-
,以下是适用于使用(!)的用例。将列表转换为字典,或者还有更好的方法和(!)的其他用法。 ?
示例:q)(!). (`A`B;(`C`D`E;`F`G`H)); q).[(!);flip (`A`B;`C`D;`E`F)]
在(!)上找不到有关用例的任何文档。在kdb教程中。请在(!)上共享任何信息。及其用途?
解决方法
这是apply&是的,您的用例有效。运算符被括在括号中的原因是因为它本身是一个点缀中的运算符,与点应用(。)一样。
如果您尝试按原样应用它,您的表情就是这样,Q不喜欢
// infixOp infixOp operand
q)+ . 4 5
'
[0] + . 4 5
^
将运算符包裹在括号内可以有效地对其进行转换,因此表达式现在变为
// operand infixOp operand
q)(+). 4 5
9
如果定义了不能在infix中使用的函数,则无需包装它
q)f:+
q)4 f 5
'type
[0] 4 f 5
^
q)f . 4 5
9
如果在您的示例中使用带有括号符号的apply,则无需包装函数
q).[+;4 5]
9
https://code.kx.com/q/ref/apply/#apply-index
https://code.kx.com/q/basics/syntax/#parentheses-around-a-function-with-infix-syntax
Jason
,在用例方面,我发现将字典/表定义为配置时非常有用,尤其是当字典对于屏幕而言太宽(水平)时,或者垂直将字段/映射成对查看时更有用。从代码/脚本的角度来看。
例如:
mapping:(!) . flip(
(`one; 1);
(`two; 2);
(`three; 3));
通过q脚本扫描时,比
mapping2:`one`two`three!1 2 3
当后者变得很宽时。
这与实际字典毫无区别,因为正如杰森指出的那样,这是同一回事。