一个很奇怪的表排序的问题
本帖最后由 易云网络 于 2015-8-18 13:37 编辑(setq ssma (mapcar 'cdr ssma))
(setq lll (vl-sort ssma'(lambda (a b) (< (caar a)(caar b)))))
(setq lllzzz (vl-sort lll '(lambda (a b) (< (cadr(car a)) (cadr(car b))))));好像就这一行起作用把LLL的排序忽略了
这个排序是这个样子的
我在CAD里面输入 :
!ssma 把结果重新(setq ssma ‘ 就可以了第二个图
下面的SSMA 就是在CAD里面输入 : !ssma 的结果的表
*(defun c:ttw ()
(setq ssma '(((43.9648 45.5411) (53.9648 45.5411) <图元名: 7C56D560>) ((28.2134 30.3314)
(38.2134 30.3314) <图元名: 7C56D550>) ((26.7721 19.9772) (36.7721 19.9772)
<图元名: 7C56D538>) ((10.0 10.0) (20.0 10.0) <图元名: 7C56D500>) ((0.682195
45.5411) (10.6822 45.5411) <图元名: 7C56D578>) ((15.6344 45.5411) (25.6344
45.5411) <图元名: 7C56D570>) ((31.8457 45.5411) (41.8457 45.5411) <图元名:
7C56D568>) ((13.2612 30.3314) (23.2612 30.3314) <图元名: 7C56D558>) ((44.4247
30.3314) (54.4247 30.3314) <图元名: 7C56D548>) ((56.5438 30.3314) (66.5438
30.3314) <图元名: 7C56D540>) ((41.7242 19.9772) (51.7242 19.9772) <图元名:
7C56D530>) ((57.9355 19.9772) (67.9355 19.9772) <图元名: 7C56D528>) ((70.0546
19.9772) (80.0546 19.9772) <图元名: 7C56D520>) ((53.2826 10.0) (63.2826 10.0)
<图元名: 7C56D518>) ((41.1635 10.0) (51.1635 10.0) <图元名: 7C56D510>)
((24.9522 10.0) (34.9522 10.0) <图元名: 7C56D508>))
)
(setq lll (vl-sort ssma'(lambda (a b) (< (caar a)(caar b)))))
(setq lllzzz (vl-sort lll '(lambda (a b) (< (cadar a) (cadar b)))))
(setq b 0)
(repeat (length lllzzz)
(setq a (caar lllzzz))
(setq #k (rtos (setq b (1+ b))2 0))
(entmake
(list '(0 . "MTEXT") '(100 . "AcDbEntity")'(100 . "AcDbMText")
(cons 1 #k) ;;文字内容
(cons 40 1.9) ;;文字高度
(cons 41 0.7) ;;文字倾斜度
(cons 10 a) ;;文字插入点
(cons 7 "standard");; 文字样式
(cons 8 "0") ;;文字图层
)
)
(setq lllzzz (cdr lllzzz))
)
;
) (setq ssma '(((43.9648 45.5411) (53.9648 45.5411) <图元名: 7C56D560>) ((28.2134 30.3314)
(38.2134 30.3314) <图元名: 7C56D550>) ((26.7721 19.9772) (36.7721 19.9772)
<图元名: 7C56D538>) ((10.0 10.0) (20.0 10.0) <图元名: 7C56D500>) ((0.682195
45.5411) (10.6822 45.5411) <图元名: 7C56D578>) ((15.6344 45.5411) (25.6344
45.5411) <图元名: 7C56D570>) ((31.8457 45.5411) (41.8457 45.5411) <图元名:
7C56D568>) ((13.2612 30.3314) (23.2612 30.3314) <图元名: 7C56D558>) ((44.4247
30.3314) (54.4247 30.3314) <图元名: 7C56D548>) ((56.5438 30.3314) (66.5438
30.3314) <图元名: 7C56D540>) ((41.7242 19.9772) (51.7242 19.9772) <图元名:
7C56D530>) ((57.9355 19.9772) (67.9355 19.9772) <图元名: 7C56D528>) ((70.0546
19.9772) (80.0546 19.9772) <图元名: 7C56D520>) ((53.2826 10.0) (63.2826 10.0)
<图元名: 7C56D518>) ((41.1635 10.0) (51.1635 10.0) <图元名: 7C56D510>)
((24.9522 10.0) (34.9522 10.0) <图元名: 7C56D508>))
)这个代码.你怎么写的... 好厉害. 本帖最后由 易云网络 于 2015-8-18 12:41 编辑
鱼与熊掌 发表于 2015-8-18 11:42 http://bbs.mjtd.com/static/image/common/back.gif
这个代码.你怎么写的... 好厉害.
不是写的是复制来的,有什么问题吗?请指教 !
一次解决
(setqlst(mapcar 'cdr ssma))
(setq lst(vl-sort lst '(lambda(e1 e2)(if (equal (cadr e1)(cadr e2) 1e-8)(< (car e1)(car e2))(< (cadr e1)(cadr e2))))
)) edata 发表于 2015-8-18 12:52 static/image/common/back.gif
一次解决
两个一起还不会改,麻烦看看
错误: 用于比较的参数类型不正确: (38.2134 30.3314) (36.7721 19.9772) 本帖最后由 易云网络 于 2015-8-18 13:51 编辑
edata 发表于 2015-8-18 12:52 http://bbs.mjtd.com/static/image/common/back.gif
一次解决
(setqlst(mapcar 'cdr ssma))
(setq lst(vl-sort lst '(lambda(e1 e2)(if (equal (cadr e1)(cadr e2) 1e-8)(< (caar e1)(caar e2))(< (cadar e1)(cadar e2))))
))
改成这样可以运行了,问题依旧
(setqlst(mapcar 'cdr ssma))(setq lst(vl-sort lst '(lambda(e1 e2)(if (equal (cadar e1)(cadar e2) 1e-8)(< (caar e1)(caar e2))(< (cadar e1)(cadar e2)))) ))
这样子可以了 太谢谢您了
你用的第二个点比较,如果是第一个点,mapcar'cdr ssma都可以省掉了。
如果还是第二点
(vl-sort lst ==> (vl-sort (mapcar 'cdr ssma)
又省掉了一个setq
。。
高级 edata 发表于 2015-8-18 15:20 static/image/common/back.gif
你用的第二个点比较,如果是第一个点,mapcar'cdr ssma都可以省掉了。
如果还是第二点
(vl-sort lst ==>...
说来也奇怪,为什么会出现这种情况能 vl-sort是重新排序,不是按原来的顺序排列,必须在vl-sort指定的判断函数下完成两个比较。
比如说,你把学生先按男女排列,再把学生按年龄排列,那么你最后的命令是按年龄排列,但是没说还得分男女,所以同学们最后只会按照年龄排列了。
页:
[1]
2