sorry,我为我刚才的武断表示道歉:)作为补偿,发一个为了测试你的排序效果临时做的lsp用途是调用sort函数在屏幕上取点并标注序号(defun c:ptsort(/ pt lst i) ;ptlst 全局.
(vl-cmdf ".undo" "be")
(while (and (princ "\n取点<上一组点表>:") (setq pt (getpoint)))
(setq lst (cons pt lst))
)
(setqptlst (if lst lst ptlst))
(setq do (getint "\n输入排序方式(0=X排序,1=Y排序,2=先X后Y,3=先Y后X):"))
(setq i 0)
(if ptlst
(foreach n (sort ptlst (list do < <))
(vl-cmdf ".text" n "500" "0" (itoa (setq i (1+ i))) "")
)
)
(vl-cmdf ".undo" "e")
(princ)
)运行效果如下: 其实,要写一个多维数组排序的通用函数也不难的。前面的只能对x,y(即第0,1元素)排序,通用函数应该可以任意指定第几元素。
从代码上,myf和aeo的都已经比较精简,尤其aeo的。但是从程序结构上不具开放性(因此似乎只能局限于对,xy的处理,如果要对更多,比如z ,(nth n lst)元素再组合排序,便要相应修改程序。希望有能力的朋友写出一个通用函数来:)
我已经写好了,等等大家再发:) 顶一下,别让掉下去了 现在好像又有人在讨论这样子的问题了,我不知道关于这个问题的讨论是否有了最后的定论。有知道的请给个帖子的地址我看看 无痕发表于2004-4-3 14:36:00static/image/common/back.gif其实,要写一个多维数组排序的通用函数也不难的。前面的只能对x,y(即第0,1元素)排序,通用函数应该可以任意指定第几元素。
从代码上,myf和aeo的都已经比较...
<BR>刚好想写一个没时间,等着抄了,赫赫。 难到最后是没定论的?
偉個自動排序實例程序
支持R14。 楼上的,能对你的程序说明一下吗 <P>楼上的真是AUTOLISP的铁杆FANS,不过用VLISP更简单,而且不用那么长的代码</P>
<P>(setq b '((1 3)(2 2)(1 1)(3 5)(2 4)))</P>
<P>(setq a (vl-sort b<BR> (function (lambda (e1 e2)<BR> (< (cadr e1) (cadr e2)) ) ) ))</P>
<P>返回:((1 1) (2 2) (1 3) (2 4) (3 5))</P>
<P> (vl-sort a<BR> (function (lambda (e1 e2)<BR> (< (car e1) (car e2)) ) ) )</P>
<P>返回:((1 1) (1 3) (2 2) (2 4) (3 5))</P>
<P>两行就搞掂了,呵</P> 程序很好,谢谢