【问题标题】:Appending character to string in Common Lisp在 Common Lisp 中将字符附加到字符串
【发布时间】:2013-08-04 17:53:43
【问题描述】:

我有一个字符 ch,我想将它附加到字符串 str。我意识到你可以像这样连接字符串:

(setf str (concatenate 'string str (list ch)))

但这似乎相当低效。有没有更快的方法来追加一个字符?

【问题讨论】:

    标签: string lisp character common-lisp


    【解决方案1】:

    如果字符串有填充指针并且可能也是可调整的。

    可调=可以改变它的大小。

    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!"
    

    【讨论】:

      【解决方案2】:

      如果你想多次扩展单个字符串,通常是 使用 with-output-to-string 非常高效,写入流 它提供。请务必使用 write 或 princ 等(而不是 format) 性能。

      【讨论】:

      • 或其他晦涩难懂的替代方案,确保可以编译 FORMAT 字符串。
      猜你喜欢
      • 1970-01-01
      • 2016-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-13
      • 2014-11-19
      • 1970-01-01
      相关资源
      最近更新 更多