3.9 向量

向量是任意值的定长数组。与列表不同,向量支持常量时间的元素访问和更新。

向量的打印形式与列表类似,都是带括号的元素序列,不过向量在 ' 之后还有 # 前缀;如果其中存在无法用 quote 引述表达的元素, 则会使用 vector 表示。

向量作为表达式时支持可选的长度。此外,向量作为表达式时隐式地用 quote 引述了其内容的形式,这意味着向量内容中的标识符和括号括住的形式表示符号和列表。

+The Racket ReferenceReading Vectors一节中阐述了向量语法的要点。

例如:
> #("a" "b" "c")

'#("a" "b" "c")

> #(name (that tune))

'#(name (that tune))

> #4(baldwin bruce)

'#(baldwin bruce bruce bruce)

> (vector-ref #("a" "b" "c") 1)

"b"

> (vector-ref #(name (that tune)) 1)

'(that tune)

与字符串类似,向量也分可变和不可变两种,直接写成表达式的向量是不可变的。

向量和列表之间可通过 vector->listlist->vector 互相转换, 这种转换在与列表的预定义过程组合时特别有用。当分配额外列表的代价看起来太高时, 可考虑使用 for/fold 之类的循环形式,同列表一样,它也接受向量。

例如:
> (list->vector (map string-titlecase
                     (vector->list #("three" "blind" "mice"))))

'#("Three" "Blind" "Mice")

+The Racket ReferenceVectors一节中提供了关于向量及其过程的更多信息。