无痕 发表于 2004-4-3 05:51:00

meflying发表于2004-4-2 23:16:00static/image/common/back.gif实在看不明白楼上说的到底是要说明什么问题, 如下图,假设列表是这个各自各交点的一个表,如果仅按Y排(从小到大),则结果可能会是:(3 1 2 4 6 5 78 ...
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)
)运行效果如下:

无痕 发表于 2004-4-3 14:36:00

其实,要写一个多维数组排序的通用函数也不难的。前面的只能对x,y(即第0,1元素)排序,通用函数应该可以任意指定第几元素。


从代码上,myf和aeo的都已经比较精简,尤其aeo的。但是从程序结构上不具开放性(因此似乎只能局限于对,xy的处理,如果要对更多,比如z ,(nth n lst)元素再组合排序,便要相应修改程序。希望有能力的朋友写出一个通用函数来:)


我已经写好了,等等大家再发:)

无痕 发表于 2004-4-4 00:44:00

顶一下,别让掉下去了

LONGXIN 发表于 2005-5-15 13:22:00

现在好像又有人在讨论这样子的问题了,我不知道关于这个问题的讨论是否有了最后的定论。有知道的请给个帖子的地址我看看

cy956 发表于 2005-5-16 00:57:00

无痕发表于2004-4-3 14:36:00static/image/common/back.gif其实,要写一个多维数组排序的通用函数也不难的。前面的只能对x,y(即第0,1元素)排序,通用函数应该可以任意指定第几元素。



从代码上,myf和aeo的都已经比较...


<BR>刚好想写一个没时间,等着抄了,赫赫。

LONGXIN 发表于 2005-5-16 07:53:00

难到最后是没定论的?

hoprich123 发表于 2005-5-17 11:56:00

偉個自動排序實例程序




支持R14。

leeyuan 发表于 2005-7-11 10:48:00

楼上的,能对你的程序说明一下吗

sandy2002 发表于 2005-7-11 20:40:00

<P>楼上的真是AUTOLISP的铁杆FANS,不过用VLISP更简单,而且不用那么长的代码</P>
<P>(setq b '((1 3)(2 2)(1 1)(3 5)(2 4)))</P>
<P>(setq a (vl-sort&nbsp;b<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (function (lambda (e1 e2)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (&lt; (cadr e1) (cadr e2)) ) ) ))</P>
<P>返回:((1 1) (2 2) (1 3) (2 4) (3 5))</P>
<P>&nbsp;(vl-sort&nbsp;a<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (function (lambda (e1 e2)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (&lt; (car e1) (car e2)) ) ) )</P>
<P>返回:((1 1) (1 3) (2 2) (2 4) (3 5))</P>
<P>两行就搞掂了,呵</P>

LIFEI18 发表于 2010-10-31 18:06:00

程序很好,谢谢
页: 1 [2] 3 4
查看完整版本: [原创]精典排序函数:能根据X、Y条件对坐标表进行各种排序!(源代码哟)