【问题标题】:KDB '.' operatorKDB '.'操作员
【发布时间】:2013-03-29 14:49:24
【问题描述】:

最简单形式的. 运算符用于索引列表。您如何解释这段代码中的英文用法?

if[x~"last";upd:{[t;x].[t;();,;r::select by sym from x]}]

我也不理解这一行中的空列表和 :: 运算符,但也许一旦 .被清除。

【问题讨论】:

    标签: kdb


    【解决方案1】:

    用简单的英语我会解释为: 通过应用带有值 r 的附加/逗号函数,在所有 () 索引处修改表 t。

    首先考虑几个更简单的@:

    q)l:3 5 7 9
    q)l:1.1 2.2 3.3
    q)@[l; 0 2; +; 10]
    11.1 2.2 13.3
    
    q)d:`p`o`i!4.4 5.5 6.6
    q)@[d; `p`i; -; 10]
    p| -5.6
    o| 5.5
    i| -3.4
    

    如您所见,格式为 @[数据结构;指数;功能; y-arg]

    表示索引处的 dataStructure 应用具有给定 y 参数的函数。注意列表 l 索引 0 2 表示最顶层的索引 0 和 2。没有办法使用 @ 进行深度索引。例如给定矩阵 m:(1 2 3; 4 5 6; 7 8 9) 我们如何使用这种格式只修改值 4 和 6?

    q)/ @ indexes repeatedly at topmost level
    q)/ definitely not what we want
    q)@[m;(1;0 2);+;100]
    101 102 103
    104 105 106
    107 108 109
    
    q)/ **. indexes into the data structure**
    
    q).[m;1 2;+;100]
    1 2 3
    4 5 106
    7 8 9
    
    q).[m;(1;0 2);+;100]
    1   2 3
    104 5 106
    7   8 9
    

    最后,空列表 () 是一种简短的说法,适用于所有索引:

    q).[m;();+;100]
    101 102 103
    104 105 106
    107 108 109
    

    【讨论】:

      【解决方案2】:

      . 在这种情况下意味着将, 应用于trr 在每次调用时全局更新,并包含 sym 收到的最后一个值。 :: 在大多数情况下分配给全局。

      code.kx.com详细描述.函数

      【讨论】:

      • 我重新阅读了 code.cx.com 参考,我不明白如何。可以适用于 t 和 r。 code.cx 参考页面中的第二个用法提到了变价函数,但我看不出 t 可能是哪种函数。空列表'()'到底有什么用?
      • 您需要点击“.”参考中“另见”下的“修改功能形式”链接。
      猜你喜欢
      • 1970-01-01
      • 2010-11-25
      • 2015-07-25
      • 2011-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-22
      • 2021-10-12
      相关资源
      最近更新 更多