vitalgg 发表于 2023-3-24 17:47:52

中文数字排序。

本帖最后由 vitalgg 于 2023-3-24 18:09 编辑



感谢kkq0305 提供思路。
http://bbs.mjtd.com/thread-187438-1-1.html

在 CAD 中已安装 @lisp 的 ,请先运行 (@:updatelib) 更新函数库。

(defun string:sort-by-number (lst-str)
"按数字排序字符串\n在夹杂数字时,如果数字前后的字符串相同,按数字大小排序"
"排序后的字符串表"
"(string:sort-by-number '(\"a5\" \"a1\"\"a8\"\"b2\"\"b1\"\"a110\"\"a13\"))"
(vl-sort lst-str
   (quote (lambda (x y)
      (apply (quote or)
         (mapcar (quote (lambda (a b)
            (cond ((and (string:intp a)
            (string:intp b))
               (< (atoi a)
                  (atoi b)))
            ((and (string:realp a)
            (string:realp b))
               (< (atof a)
                  (atof b)))
            ((and (string:hannumberp a)
            (string:hannumberp b))
               (< (string:hannumber2number a)
                  (string:hannumber2number b)))
            (t (< a b)))))
         (string:auto-split x)
         (string:auto-split y)))))))

所有含有 : 冒号的函数,均为 @lisp 函数库中定义的函数。

全部源码:
https://gitee.com/atlisp/atlisp-lib



飞雪神光 发表于 2023-3-24 19:24:28

这个看起来真不错
页: [1]
查看完整版本: 中文数字排序。