pizg 发表于 2010-11-9 13:23:00

<p>這是我寫的, 未做錯誤檢查, 請大家參考:</p>
<p>&nbsp;</p>
<p><font face="Verdana">(defun mySort(lst lstKey / i n)<br/>&nbsp; (setq i 0)<br/>&nbsp; (repeat (length lstKey)<br/>&nbsp;&nbsp;&nbsp; (setq n (nth i lstKey))<br/>&nbsp;&nbsp;&nbsp; (setq lst (vl-sort lst (function (lambda (e1 e2) (&lt; (nth n e1) (nth n e2))))))<br/>&nbsp;&nbsp;&nbsp; (setq i (1+ i))<br/>&nbsp; )<br/>&nbsp; lst<br/>)</font></p>
<p><font face="Verdana"></font>&nbsp;</p>
<p><font face="Verdana"><font face="Verdana">(setq lst '((1 3)(2 2)(1 2)(3 1)(2 1)(3 2)(2 3)(1 1)(3 3)))<br/>對X排序 (mySort lst '(0))&nbsp;&nbsp;&nbsp;返回: '((1 3) (1 2) (1 1) (2 2) (2 1) (2 3) (3 1) (3 2) (3 3))<br/>對Y排序 (mySort lst '(1))&nbsp;&nbsp;&nbsp;返回: '((3 1) (2 1) (1 1) (2 2) (1 2) (3 2) (1 3) (2 3) (3 3))<br/>對X再Y排序 (mySort lst '(0 1))&nbsp; 返回: '((1 1) (2 1) (3 1) (1 2) (2 2) (3 2) (1 3) (2 3) (3 3))<br/>對Y再X排序 (mySort lst '(1 0))&nbsp; 返回: '((1 1) (1 2) (1 3) (2 1) (2 2) (2 3) (3 1) (3 2) (3 3))<br/></font>如果要對X再Y再Z排序 (mySort lst '(0 1 2))&nbsp;.....</font></p>
<p>此程序適合資料庫之多欄位排序,</p>
<p>例如有一資料庫第7個欄位是電話號碼,</p>
<p>則可以如下應用 ---&gt;&nbsp;&nbsp;(mySort lstDB '(6))&nbsp; </p>
<p>&nbsp;</p>
<p>如果要順排或逆排, 程序可以改寫如下:</p>
<p><font face="Verdana">(defun mySort(lst lstKey mode / i n)<br/>&nbsp; (setq i 0)<br/>&nbsp; (repeat (length lstKey)<br/>&nbsp;&nbsp;&nbsp; (setq n (nth i lstKey))<br/>&nbsp;&nbsp;&nbsp; (setq lst (vl-sort lst (function (lambda (e1 e2) (&lt; (nth n e1) (nth n e2))))))<br/>&nbsp;&nbsp;&nbsp; (setq i (1+ i))<br/>&nbsp; )<br/>&nbsp; (if (and mode (= (strcase mode) "D")) (reverse lst) lst)<br/>)</font></p>
<p>&nbsp;</p>
<p><font face="Verdana">(mySort lst '(1 0) nil)&nbsp;&nbsp; 返回: '((1 1) (1 2) (1 3) (2 1) (2 2) (2 3) (3 1) (3 2) (3 3))<br/>(mySort lst '(1 0) "A")&nbsp; 返回: '((1 1) (1 2) (1 3) (2 1) (2 2) (2 3) (3 1) (3 2) (3 3))<br/>(mySort lst '(1 0) "D")&nbsp; 返回: '((3 3) (3 2) (3 1) (2 3) (2 2) (2 1) (1 3) (1 2) (1 1))</font></p>

461045462 发表于 2010-11-10 06:54:00

<p>来学习了</p>
<p>慢慢领会</p>
<p>谢谢各位大俠</p>

zwqgdhl 发表于 2011-7-12 13:00:49

先下载,以后总会有用的

gzbccy 发表于 2011-7-12 21:12:51

厉害厉害,我来了解下

fxxpleasure 发表于 2011-12-18 21:55:59

meflying 发表于 2003-8-15 15:55 static/image/common/back.gif
这样就可以了

    ((= (car fun) 2) (setq a (vl-sort lst 'des)) (vl-sort a 'des2))
    ((= (car fun) 3) (setq a (vl-sort lst 'des2)) (vl-sort a 'des))
这个语句无法做到 x 或y优先,后面的语句也只能是对原表重新排列啊。

xjf 发表于 2011-12-19 18:15:28

      确实经典,谢大侠分享

liuchuan5523 发表于 2011-12-27 21:27:52

这个怎么使用了,转换成lisp,输入什么命令了?

faith66 发表于 2012-3-10 19:56:38

这帖子痕经典,无痕大师,等待你的通用排序程序中。。。。。。。。。。。。。

wowan1314 发表于 2012-4-9 16:08:42

晕,我一直也像“无痕”那么想象的! 看到此贴才明白哦!

原来是我把简单的问题复杂化了。

生活就是如此,要么是吧简单的复杂化了 ,,要么是把复杂的想简单了! 就是个纠结啊!

gao051525 发表于 2012-5-28 10:41:43

楼主厉害,我学习了
页: 1 2 [3] 4
查看完整版本: [原创]精典排序函数:能根据X、Y条件对坐标表进行各种排序!(源代码哟)