【发布时间】:2021-09-01 09:16:57
【问题描述】:
不完全确定以下代码的作用:
p1:(,').(::;p@)@\:distinct#[;x]cols key p;
尤其是这部分 -> (,').(::;p@)@\:
根据我的理解,表 p 的不同列是由 x 键入的,但是 (,').(::;p@) 的这一位让我感到困惑。这是否取最后一个值?对于每个键控列?
【问题讨论】:
标签: kdb
不完全确定以下代码的作用:
p1:(,').(::;p@)@\:distinct#[;x]cols key p;
尤其是这部分 -> (,').(::;p@)@\:
根据我的理解,表 p 的不同列是由 x 键入的,但是 (,').(::;p@) 的这一位让我感到困惑。这是否取最后一个值?对于每个键控列?
【问题讨论】:
标签: kdb
很难确切知道发生了什么,因为您没有向我们提供完整的上下文,但 :: 是只返回相同输入的标识函数,也就是
q)(::)`a
`a
q)(::)1 2
1 2
和p@ 将是键控表p 的索引/查找。所以(::;p@) 是两个函数的列表——第一个函数是身份,第二个函数是查找键控表。输入distinct#[;x]cols key p 应用于@\: 两个函数中的每一个(apply-each-left)。第一个函数输出将是 x 中给定键 p 的不同行。第二个函数输出是将这些键查找到键控表p。
最后,(,'). 是函数 (,'),又名 append-each,点应用于两个函数结果,请参阅 https://code.kx.com/q/ref/apply/#apply-index
这相当于
{x,'y}[functionResult1;functionResult2]
所以在这个例子中,两个表的 append-each 是一个横向表连接,见底部https://code.kx.com/q/ref/join/
【讨论】: