<p>這是我寫的, 未做錯誤檢查, 請大家參考:</p>
<p> </p>
<p><font face="Verdana">(defun mySort(lst lstKey / i n)<br/> (setq i 0)<br/> (repeat (length lstKey)<br/> (setq n (nth i lstKey))<br/> (setq lst (vl-sort lst (function (lambda (e1 e2) (< (nth n e1) (nth n e2))))))<br/> (setq i (1+ i))<br/> )<br/> lst<br/>)</font></p>
<p><font face="Verdana"></font> </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)) 返回: '((1 3) (1 2) (1 1) (2 2) (2 1) (2 3) (3 1) (3 2) (3 3))<br/>對Y排序 (mySort lst '(1)) 返回: '((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)) 返回: '((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)) 返回: '((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)) .....</font></p>
<p>此程序適合資料庫之多欄位排序,</p>
<p>例如有一資料庫第7個欄位是電話號碼,</p>
<p>則可以如下應用 ---> (mySort lstDB '(6)) </p>
<p> </p>
<p>如果要順排或逆排, 程序可以改寫如下:</p>
<p><font face="Verdana">(defun mySort(lst lstKey mode / i n)<br/> (setq i 0)<br/> (repeat (length lstKey)<br/> (setq n (nth i lstKey))<br/> (setq lst (vl-sort lst (function (lambda (e1 e2) (< (nth n e1) (nth n e2))))))<br/> (setq i (1+ i))<br/> )<br/> (if (and mode (= (strcase mode) "D")) (reverse lst) lst)<br/>)</font></p>
<p> </p>
<p><font face="Verdana">(mySort lst '(1 0) nil) 返回: '((1 1) (1 2) (1 3) (2 1) (2 2) (2 3) (3 1) (3 2) (3 3))<br/>(mySort lst '(1 0) "A") 返回: '((1 1) (1 2) (1 3) (2 1) (2 2) (2 3) (3 1) (3 2) (3 3))<br/>(mySort lst '(1 0) "D") 返回: '((3 3) (3 2) (3 1) (2 3) (2 2) (2 1) (1 3) (1 2) (1 1))</font></p>
<p>来学习了</p>
<p>慢慢领会</p>
<p>谢谢各位大俠</p>
先下载,以后总会有用的
厉害厉害,我来了解下
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优先,后面的语句也只能是对原表重新排列啊。
确实经典,谢大侠分享
这个怎么使用了,转换成lisp,输入什么命令了?
这帖子痕经典,无痕大师,等待你的通用排序程序中。。。。。。。。。。。。。
晕,我一直也像“无痕”那么想象的! 看到此贴才明白哦!
原来是我把简单的问题复杂化了。
生活就是如此,要么是吧简单的复杂化了 ,,要么是把复杂的想简单了! 就是个纠结啊!
楼主厉害,我学习了