明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1315|回复: 1

[求助]请教关于VL-SORT排序丢失元素的问题!

[复制链接]
发表于 2009-1-4 09:54 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2009-1-4 9:55:28 编辑

我想将一组(x y z)坐标的串行按照先x从小到大,再z从小到大,最后y从小到大的顺序排序。
我用以下方法排序:
(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))) (< (caddr p1) (caddr p2)))
   ((and (= (car p1) (car p2)) (= (caddr p1) (caddr p2))(/= (cadr p1) (cadr p2)))(< (cadr p1) (cadr p2)))
   (T NIL)
  ))))

串行元素少的情况下排序正常,为什么元素一多,排序后就会少很多元素?

如下面的例子,排序前有25个元素,排序后始终只有18个,总要丢掉几个,我的串行里没有重复的元素啊。

请高手帮我看看我的程序是不是有问题,或者哪位高手帮我写一段解决下我的问题。

论坛的关于排序的帖子我都看了好几遍了,高手们提供了很多方法,但我始终没找到一个适合我这种情况的,要么就是只能单一的按x或者y排序,要么就有些我调试通不过,要么就没有源码。

程序如下:

(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))) (< (caddr p1) (caddr 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")
)

 楼主| 发表于 2009-1-4 09:56 | 显示全部楼层

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-6-21 13:37 , Processed in 0.140956 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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