我已经学习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),以及在开发中的何处可以使用函数列表?
谢谢, 瓦金达。
答案 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/
以及有关投射的信息: