什么是 !在kdb中,并且在以下用例中有效吗?

问题描述

  1. 什么是(!)。在kdb中调用过?

  2. ,以下是适用于使用(!)的用例。将列表转换为字典,或者还有更好的方法和(!)的其他用法。 ?
    示例:

    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

当后者变得很宽时。

这与实际字典毫无区别,因为正如杰森指出的那样,这是同一回事。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...