明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 480|回复: 8

[经验] 字串列表拼接为字符串

[复制链接]
发表于 6 天前 | 显示全部楼层 |阅读模式
本帖最后由 dcl1214 于 2025-3-4 13:34 编辑

字符串拼接,调用频繁且字符量大的时候,速度很关键,哪位还有更快的字符串拼接,一起切磋一下
  1. (defun $pin-jie$
  2.        (strs fgf / a bars len str str str-last strs-car strs-n)
  3.   (if (and strs
  4.      fgf
  5.      (= (type strs) 'list)  ;必须是表格式
  6.      (setq strs (vl-remove nil strs)) ;空对象删除
  7.      (setq strs-car (CAR strs))
  8.      (= (type strs-car) 'STR)
  9.           ;第一个必须是字符串
  10.      (= (type fgf) 'str)
  11.       )
  12.     (progn
  13.       (setq strs (cdr strs))
  14.       (setq strs (reverse strs))
  15.       (setq strs-n nil)
  16.       (while (setq a (car strs))
  17.   (setq strs-n (cons a strs-n))
  18.   (setq strs-n (cons fgf strs-n))
  19.   (setq strs (cdr strs))
  20.       )
  21.       (setq strs-n (cons strs-car strs-n))
  22.           ;添加分隔符
  23.       (setq str (vl-catch-all-apply 'apply (list 'strcat strs-n)))
  24.           ;快速拼接一次
  25.       (if (vl-catch-all-error-p str)  ;拼接出错了(估计出现了非字串现象)
  26.   (progn
  27.     (setq
  28.       strs-n (mapcar
  29.          (function (lambda (a)
  30.          (if (and a (/= (type a) 'str))
  31.            (setq a (vl-prin1-to-string a))
  32.          )
  33.          a
  34.              )
  35.          )
  36.          strs-n
  37.        )
  38.     )        ;强制转换为字串格式
  39.     (setq str (vl-catch-all-apply 'apply (list 'strcat strs-n)))
  40.           ;再次拼接
  41.     (if (vl-catch-all-error-p str) ;拼接出错了
  42.       (setq str nil)    ;做空变量
  43.     )
  44.   )
  45.       )
  46.     )
  47.   )
  48.   str          ;返回给上一级
  49. )
  50. 共计:900000个字符,耗时:0.985
  51. ; 9 表格 从 #<editor "C:/Users/Administrator/Desktop/字符拼接.LSP"> 加载
  52. _$
  53. 共计:900000个字符,耗时:0.937
  54. ; 9 表格 从 #<editor "C:/Users/Administrator/Desktop/字符拼接.LSP"> 加载
  55. _$
  56. 共计:900000个字符,耗时:0.953
  57. ; 9 表格 从 #<editor "C:/Users/Administrator/Desktop/字符拼接.LSP"> 加载
  58. _$
  59. 共计:1000000个字符,耗时:1.375
  60. ; 9 表格 从 #<editor "C:/Users/Administrator/Desktop/字符拼接.LSP"> 加载
  61. _$
  62. 共计:1000000个字符,耗时:1.062
"觉得好,就打赏"
还没有人打赏,支持一下
回复

使用道具 举报

发表于 6 天前 | 显示全部楼层
SIMD每秒13G ( _> )
回复 支持 反对

使用道具 举报

发表于 6 天前 | 显示全部楼层
本帖最后由 wzg356 于 2025-3-4 17:51 编辑

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

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


第一个apply ....strcat  可以在while内处理好
回复 支持 反对

使用道具 举报

发表于 6 天前 | 显示全部楼层
99%的人一年中99%的时间遇不到需要用lisp连接900000个字符。提速到一微秒也没啥意义。
回复 支持 反对

使用道具 举报

发表于 6 天前 | 显示全部楼层
99%的人一年中99%的时间遇不到需要用lisp连接900000个字符。提速到一微秒也没啥意义
回复 支持 反对

使用道具 举报

发表于 5 天前 | 显示全部楼层
学习了,提点小问题:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复 支持 反对

使用道具 举报

发表于 5 天前 | 显示全部楼层
用来对抗破解,用strcat来拼接字符串,比直接用vl-list->string破解难度更大一点。
vl-list->string有自动处理程序,可以一键还原。
回复 支持 反对

使用道具 举报

发表于 4 天前 | 显示全部楼层
学习了,路过踩下。
回复 支持 反对

使用道具 举报

 楼主| 发表于 4 天前 | 显示全部楼层
baitang36 发表于 2025-3-5 16:24
用来对抗破解,用strcat来拼接字符串,比直接用vl-list->string破解难度更大一点。
vl-list->string有自动 ...

学习了!!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-3-10 16:08 , Processed in 0.165398 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表