没有数据类型的kdb中的空列表创建

时间:2018-11-21 17:33:04

标签: list kdb

我已经学习KDB已有一段时间了,现在需要您的帮助。 我们可以使用以下语法创建空列表:     mylistname:0#

示例:

q)myEmptySymbolList:0#`
q)myEmptySymbolList
`symbol$()
q)type myEmptySymbolList
11h

q)myEmptyFloatList:0#0n
q)myEmptyFloatList
`float$()
q)type myEmptyFloatList
9h

q)myEmptyDateList:0#0Nd
q)myEmptyDateList
`date$()
q)type myEmptyDateList
14h

但是当我们不指定dataType时,它将创建投影函数类型的列表,如下所示。

q)myEmptyTypeList:0#
q)myEmptyTypeList
#[0]
q)type myEmptyTypeList
104h

我有点困惑,为什么它创建投影列表功能类型? 如果我想创建其他函数类型的列表,我们该如何做(例如https://code.kx.com/wiki/Reference/Datatypes#Function_Types),以及在开发中的何处可以使用函数列表?

谢谢, 瓦金达。

1 个答案:

答案 0 :(得分:4)

在kdb中,对标量或原子值进行零计数(例如0#1)实际上是创建空列表的捷径。

使用此快捷方式可能很有用,但是出于一般目的,您可以从通用列表开始:() 然后,您可以使用$以及符号,字符或简称来强制转换此列表:

q)`int$()
`int$()
q)"i"$()
`int$()
q)6h$()
`int$()

这些都会导致一个空的整数列表。

在上面的最后一部分中,#是二元函数-当您执行0#时,实际上并没有在此处创建投影列表,而是在创建单个投影。 kdb中没有函数的类型列表:

q)type ({x+1};{x+2})
0h

它们始终显示为混合列表(类型0),因此您只是看到在这种情况下创建的投影的(正)类型(104)。

这里有更新的类型列表:

https://code.kx.com/q/ref/datatypes/

以及有关投射的信息:

https://code.kx.com/q/ref/casting/#cast