Shengfantasy 发表于 2019-4-7 22:57:35

关于排序的问题请大佬们指点指点迷津

本帖最后由 Shengfantasy 于 2019-4-7 22:58 编辑

比如我框选了这个四个图号形成一个选择集 thss ,怎么让它们按从小到大排序下来变成有序的?我就是排序这一步不会实现。
   



Andyhon 发表于 2019-4-8 10:02:33

ref:
http://zml84.blog.sohu.com/241043935.html

yshf 发表于 2019-4-8 10:39:41

(defun c:test()
    (if (setq thss (ssget '((0 . "text") (1 . "S-*#"))))
      (progn
             (setq i 0n (sslength thss))
             (setq lst nil)
             (repeat n
                  (setq lst (cons (cdr (assoc 1 (entget (ssname thss i))))))
                (setq i (1+ i))
             )
             (setq lst (vl-sort lst '(lambda(a b)
                                       (setq a1 (vl-string-subst "" "-" (vl-string-subst "" "S" a)))
                                         (setq b1 (vl-string-subst "" "-" (vl-string-subst "" "S" b)))
                                         (< (atof a1) (atof b1))
                                   )
                      )
             )
             (princ "\n排序后:")
             (foreach x lst
                 (princ (strcat "\n" x))
             )
        )
    )
    (princ)
)

Shengfantasy 发表于 2019-4-9 00:30:21

yshf 发表于 2019-4-8 10:39
(defun c:test()
    (if (setq thss (ssget '((0 . "text") (1 . "S-*#"))))
      (progn


哈!多谢大佬!我今晚研究一晚上到现在,发现自己错在哪儿了!我是
(setq lst (vl-sort lst '(lambda(a b)
                                       (setq a1 (vl-string-subst "" "-" (vl-string-subst "" "S" a)))
                                       (setq b1 (vl-string-subst "" "-" (vl-string-subst "" "S" b)))
                                       (< (atof a1) (atof b1))
                                     )
                        )
             )
的(setq lst...)没写,刚学lisp,对语法还不熟,不过你的这段程序比我严谨好多!:lol

烟盒迷唇 发表于 2019-4-9 09:14:01

这个可以   

edsion24 发表于 2019-4-9 09:23:03

能不能把改好的程序发一下,我学习一下,我的怎么执行不了呢。。。

edsion24 发表于 2019-4-9 12:10:47

执行到(setq lst (cons (cdr (assoc 1 (entget (ssname thss i)))))),显示参数太少

Andyhon 发表于 2019-4-9 13:10:34

(cons (cdr (assoc 1 (entget (ssname thss i)))) lst)
页: [1]
查看完整版本: 关于排序的问题请大佬们指点指点迷津