dcl1214 发表于 2025-3-4 12:19:25

字串列表拼接为字符串

本帖最后由 dcl1214 于 2025-3-4 13:34 编辑

字符串拼接,调用频繁且字符量大的时候,速度很关键,哪位还有更快的字符串拼接,一起切磋一下
(defun $pin-jie$
       (strs fgf / a bars len str str str-last strs-car strs-n)
(if (and strs
   fgf
   (= (type strs) 'list);必须是表格式
   (setq strs (vl-remove nil strs)) ;空对象删除
   (setq strs-car (CAR strs))
   (= (type strs-car) 'STR)
          ;第一个必须是字符串
   (= (type fgf) 'str)
      )
    (progn
      (setq strs (cdr strs))
      (setq strs (reverse strs))
      (setq strs-n nil)
      (while (setq a (car strs))
(setq strs-n (cons a strs-n))
(setq strs-n (cons fgf strs-n))
(setq strs (cdr strs))
      )
      (setq strs-n (cons strs-car strs-n))
          ;添加分隔符
      (setq str (vl-catch-all-apply 'apply (list 'strcat strs-n)))
          ;快速拼接一次
      (if (vl-catch-all-error-p str);拼接出错了(估计出现了非字串现象)
(progn
    (setq
      strs-n (mapcar
         (function (lambda (a)
         (if (and a (/= (type a) 'str))
         (setq a (vl-prin1-to-string a))
         )
         a
             )
         )
         strs-n
       )
    )      ;强制转换为字串格式
    (setq str (vl-catch-all-apply 'apply (list 'strcat strs-n)))
          ;再次拼接
    (if (vl-catch-all-error-p str) ;拼接出错了
      (setq str nil)    ;做空变量
    )
)
      )
    )
)
str          ;返回给上一级
)
共计:900000个字符,耗时:0.985
; 9 表格 从 #<editor "C:/Users/Administrator/Desktop/字符拼接.LSP"> 加载
_$
共计:900000个字符,耗时:0.937
; 9 表格 从 #<editor "C:/Users/Administrator/Desktop/字符拼接.LSP"> 加载
_$
共计:900000个字符,耗时:0.953
; 9 表格 从 #<editor "C:/Users/Administrator/Desktop/字符拼接.LSP"> 加载
_$
共计:1000000个字符,耗时:1.375
; 9 表格 从 #<editor "C:/Users/Administrator/Desktop/字符拼接.LSP"> 加载
_$
共计:1000000个字符,耗时:1.062

你有种再说一遍 发表于 2025-3-4 16:17:32

SIMD每秒13G ( _> )

wzg356 发表于 2025-3-4 17:39:17

本帖最后由 wzg356 于 2025-3-4 17:51 编辑

出错是strcat拼接了表而不是字符串

代码里面至少有4次全循环 while apply mapcar算半次的vl-removereverse
最优解是减少循环,变量多点代码难看点没关系,能否在一次或两次循环处理好


第一个apply ....strcat可以在while内处理好

kozmosovia 发表于 2025-3-4 17:48:08

99%的人一年中99%的时间遇不到需要用lisp连接900000个字符。提速到一微秒也没啥意义。

13869574130 发表于 2025-3-4 19:11:35

99%的人一年中99%的时间遇不到需要用lisp连接900000个字符。提速到一微秒也没啥意义

yjwht 发表于 2025-3-5 10:31:17

学习了,提点小问题:

baitang36 发表于 2025-3-5 16:24:05

用来对抗破解,用strcat来拼接字符串,比直接用vl-list->string破解难度更大一点。
vl-list->string有自动处理程序,可以一键还原。

chslwj521 发表于 2025-3-6 14:31:30

学习了,路过踩下。:lol

dcl1214 发表于 2025-3-6 23:45:09

baitang36 发表于 2025-3-5 16:24
用来对抗破解,用strcat来拼接字符串,比直接用vl-list->string破解难度更大一点。
vl-list->string有自动 ...

学习了!!!
页: [1]
查看完整版本: 字串列表拼接为字符串