array

语法

array(dataType|template, [initialSize], [capacity], [defaultValue])

详情

创建一个向量。

与 Python 中 numpy.arraypandas.array 的区别:numpy.array 用于把 object 转换为 ndarray,并可推断或指定 dtype、维度、内存顺序和复制策略;pandas.array 用于从序列创建 pandas ExtensionArray,侧重 nullable/extension dtype 推断;DolphinDB 的 array 用于按指定数据类型或模板创建 DolphinDB 向量,并可指定 initialSizecapacitydefaultValue

参数

dataType 可以是基本数据类型、ANY、ANY[<BasicType>] 或 <BasicType>[]。
  • 指定基本数据类型(例如 INT、DOUBLE、STRING)时,创建对应基本类型的强类型向量,例如 array(INT, 0) 创建 INT 向量。

  • 指定 ANY 时,创建普通元组(Any Vector)。普通元组的元素可以是不同类型,也可以是标量或向量。

  • 指定 ANY[<BasicType>] 时,创建列式元组(Columnar Tuple)。其中 <BasicType> 必须是基本数据类型,列式元组中的元素类型必须保持一致;元素可以是标量或向量。

  • 指定 <BasicType>[] 时,创建数组向量(Array Vector)。其中 <BasicType> 是数组向量中每个向量元素的基本数据类型,例如 INT[] 或 DOUBLE[]。数组向量的 initialSize 必须为 0。

template 是一个已有向量。这个已有向量的数据类型决定了新向量的数据类型。

initialSize 是正整数,表示向量的初始长度,即该向量新建时的元素数量。

capacity 是正整数,表示向量的容量,即该向量新建时系统为该向量分配的内存(以元素数为单位)。当元素数超过capacity时,系统会自动扩充容量。系统首先会分配当前容量1.2~2倍的内存,然后复制数据到新的内存空间,最后释放原来的内存。

defaultValue 是向量的默认值。若指定,则只能是标量。若不指定:对于多数数据类型,默认值是 0;对于字符串和符号(Symbol),默认值是 NULL。

返回值

dataTypetemplate 决定,可以是强类型向量、普通元组、列式元组或数组向量。

例子

例 1:创建一个强类型向量。

x=array(INT, 10, 100, 1) // 向量初始长度是 10;容量是 100;元素默认值是 1
x
// 输出:[1,1,1,1,1,1,1,1,1,1]
typestr x
// 输出:FAST INT VECTOR

例 2:创建一个普通元组。

tp = array(ANY, 0, 10)
tp.append!([1, "DolphinDB", 3.14]) // 普通元组的元素可以是不同类型
tp
// 输出:(1,"DolphinDB",3.14)
typestr(tp)
// 输出:ANY VECTOR

例 3:创建一个列式元组。

ct = array(ANY[INT], 0, 10)
ct.append!([10, 20, 30])
ct.append!([40, 50])
ct
// 输出:([10,20,30],[40,50])
typestr ct
// 输出:ANY[INT] VECTOR

将列式元组作为表的一列:

t = table(1 2 as id, `A`B as name, ct as data)
t
/* 输出
   id name data
   -- ---- ------------
   1  A    [10,20,30]
   2  B    [40,50] */
schema(t).colDefs
// data 列的 typeString 为 ANY[INT]

例 4:创建一个数组向量。

av = array(INT[], 0, 10)
av.append!([1 2 3, 4 5, 6 7 8, 9 10])
av
// 输出:[[1,2,3],[4,5],[6,7,8],[9,10]]
typestr(av)
// 输出:FAST INT[] VECTOR

例 5:基于已有向量的类型创建新的向量。新向量中的元素不会复制模板向量的值。

template = 1 2 3
x = array(template, 5, 10, 0)
x
// 输出:[0,0,0,0,0]
typestr x
// 输出:FAST INT VECTOR