求助表按坐标点排序
各位大师:请教下:一个lst表中有n个类似((0 0 0) 2 5)的小表,小表内(0 0 0) 为坐标点,后面两个数可以不管,只按坐标点排序
(setq lst '(((250 120 0)2 5)((0 120 0)2 5)((0 0 0) 2 5)((250 0 0)2 5)((125 0 0)2 5)((125 120 0)2 5)));赋值lst表
如何排序成从左到右,从下到上的表: '(((0 0 0) 2 5)((125 0 0)2 5)((250 0 0)2 5)((0 120 0)2 5)((125 120 0)2 5))((250 120 0)2 5))
小表((0 0 0) 2 5)中后面数字2和5是由变量赋值的,请求大家帮忙,谢谢 试出来了,大家有没有更好的方法?烦请赐教(setq lst1(vl-sort lst
'(lambda (x y)
(if (equal (caar x) (caar y) 10)
(< (cadar x) (cadar y))
(< (caar x) (caar y))
)
)
)
) 没细看,结果错误,大侠们人呢。 明白了,还差一个步续,再排一次 (defun tt (lst);主程序
(setq lst (sort lst < cadar))
(sort2 lst)
)
(defun sort (lst fun n);一级排序
(vl-sort lst '(lambda (x y) (fun (n x) (n y))))
)
(defun sort2 (lst) ;二级排序
(if lst
(append
(apply 'list
(sort
(vl-remove-if-not
'(lambda (x) (= (cadar x) (cadaar lst)))
lst
)
<
caar
)
)
(sort2
(vl-remove-if '(lambda (x) (= (cadar x) (cadaar lst))) lst)
)
)
)
) lisp爱好者 发表于 2013-9-2 14:50 static/image/common/back.gif
试出来了,大家有没有更好的方法?烦请赐教
(setq lst1 (vl-sort lst
'(lambda (x y)
(if (equal (cadar x) (cadar y) 10)
(< (caar x) (caar y))
(< (cadar x) (cadar y))
)
)
)
)
楼主的还是很巧妙的,我的自己绕自己了。
页:
[1]