3.9 向量
向量是任意值的定长数组。与列表不同,向量支持常量时间的元素访问和更新。
向量的打印形式与列表类似,都是带括号的元素序列,不过向量在 ' 之后还有 # 前缀;如果其中存在无法用 quote 引述表达的元素, 则会使用 vector 表示。
向量作为表达式时支持可选的长度。此外,向量作为表达式时隐式地用 quote 引述了其内容的形式,这意味着向量内容中的标识符和括号括住的形式表示符号和列表。
The Racket Reference的Reading 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->list 和 list->vector 互相转换, 这种转换在与列表的预定义过程组合时特别有用。当分配额外列表的代价看起来太高时, 可考虑使用 for/fold 之类的循环形式,同列表一样,它也接受向量。
例如:
> (list->vector (map string-titlecase (vector->list #("three" "blind" "mice")))) '#("Three" "Blind" "Mice")
The Racket Reference的Vectors一节中提供了关于向量及其过程的更多信息。