明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1043|回复: 2

[求助]关于排序,请指正。谢谢!

[复制链接]
发表于 2009-4-11 17:34 | 显示全部楼层 |阅读模式

(defun c:px()

(setq lst
'((12 300.000 -400.000)
 (16 400.000 -300.000)
 (16 400.000 -400.000)
(12 300.000 -300.000)
 (4 100.000 -400.000)
(8 200.000 -300.000)
(1 0.000000 300.000)
 (1 0.000000 400.000)
 (8 200.000 -400.000)
(4 100.000 -300.000)
(12 300.000 -200.000)
 (12 300.000 0)
 (16 400.000 -100.000)
(16 400.000 0)
(16 400.000 -200.000)
 (12 300.000 -100.000)
 (4 100.000 -200.000)
 (4 100.000 0)
(8 200.000 -100.000)
(1 0.000000 100.000)
 (8 200.000 0)
 (1 0.000000 200.000)
(8 200.000 -200.000)
 (4 100.000 -100.000)
 (1 0.000000 0))
)

(setq vllst (vl-sort lst '(lambda (p1 p2)
        (cond
            ((/= (car p1) (car p2))(< (car p1) (car p2)))
            ((and (= (car p1) (car p2)) (= (caddr p1) (caddr p2))(/= (cadr p1)

(cadr p2)))(> (cadr p1) (cadr p2)))
            (T NIL)
        )
        )
        )
        )

(princ "\n")(princ "排序前共")(princ (LENGTH lst))(princ "个元素,分别为:")(princ

lst)(princ "\n")
(princ "\n")(princ "排序后共")(princ (LENGTH vllst))(princ "个元素,分别为:")(princ

vllst)(princ "\n")
)

如上所示:我想对列表X 从小到大,Y从大到小进行排序。但无论此句(> (cadr p1) (cadr p2))中的是大于号还是小于号排序结果都一样,望高手给予帮助!

发表于 2009-4-11 23:38 | 显示全部楼层

与以下程序排序方式类似:

明经CAD社区 → 工程篇 → 建筑工程 → [原创]工程桩自动编号程序
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=67802

排序思路:首先用(vl-sort)函数将以上表按x值从小到大进行排序,如返回表a,然后,再a表基础上,按x值相等将a表数据分类,返回表b,再对表b数据用(vl-sort)函数按y值从大到小进行排序,返回表c,最后用(append)函数将c表一一追加,即可。

 楼主| 发表于 2009-4-12 07:00 | 显示全部楼层
谢谢ljttjl的指教,我明白了,vl-sort的排序:不管取的X 还是Y排序,都是对每个点的X Y统一排序。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-7-4 12:41 , Processed in 0.172780 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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