我有一个字符ch
,我想要附加到字符串str
。我意识到你可以连接像这样的字符串:
(setf str (concatenate 'string str (list ch)))
但这似乎效率低下。是否有更快的方法来追加单个字符?
答案 0 :(得分:11)
如果字符串有填充指针,也可以调整。
Adjustable =可以改变它的大小。
fill-pointer =内容大小,长度,可以小于字符串大小。
VECTOR-PUSH
=在末尾添加一个元素并递增填充指针。
VECTOR-PUSH-EXTEND
= as VECTOR-PUSH
,如果数组太小,还可以调整数组的大小。
我们可以用正常的字符串制作一个可调整的字符串:
CL-USER 32 > (defun make-adjustable-string (s)
(make-array (length s)
:fill-pointer (length s)
:adjustable t
:initial-contents s
:element-type (array-element-type s)))
MAKE-ADJUSTABLE-STRING
CL-USER 33 > (let ((s (make-adjustable-string "Lisp")))
(vector-push-extend #\! s)
s)
"Lisp!"
答案 1 :(得分:7)
如果要多次扩展单个字符串,通常是这样 使用with-output-to-string,写入流非常高效 它提供。一定要使用write或princ等(而不是格式) 表现。