明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: NetBee

[原创]精典排序函数:能根据X、Y条件对坐标表进行各种排序!(源代码哟)

  [复制链接]
发表于 2010-11-9 13:23 | 显示全部楼层

這是我寫的, 未做錯誤檢查, 請大家參考:

 

(defun mySort(lst lstKey / i n)
  (setq i 0)
  (repeat (length lstKey)
    (setq n (nth i lstKey))
    (setq lst (vl-sort lst (function (lambda (e1 e2) (< (nth n e1) (nth n e2))))))
    (setq i (1+ i))
  )
  lst
)

 

(setq lst '((1 3)(2 2)(1 2)(3 1)(2 1)(3 2)(2 3)(1 1)(3 3)))
對X排序 (mySort lst '(0))   返回: '((1 3) (1 2) (1 1) (2 2) (2 1) (2 3) (3 1) (3 2) (3 3))
對Y排序 (mySort lst '(1))   返回: '((3 1) (2 1) (1 1) (2 2) (1 2) (3 2) (1 3) (2 3) (3 3))
對X再Y排序 (mySort lst '(0 1))  返回: '((1 1) (2 1) (3 1) (1 2) (2 2) (3 2) (1 3) (2 3) (3 3))
對Y再X排序 (mySort lst '(1 0))  返回: '((1 1) (1 2) (1 3) (2 1) (2 2) (2 3) (3 1) (3 2) (3 3))
如果要對X再Y再Z排序 (mySort lst '(0 1 2)) .....

此程序適合資料庫之多欄位排序,

例如有一資料庫第7個欄位是電話號碼,

則可以如下應用 --->  (mySort lstDB '(6)) 

 

如果要順排或逆排, 程序可以改寫如下:

(defun mySort(lst lstKey mode / i n)
  (setq i 0)
  (repeat (length lstKey)
    (setq n (nth i lstKey))
    (setq lst (vl-sort lst (function (lambda (e1 e2) (< (nth n e1) (nth n e2))))))
    (setq i (1+ i))
  )
  (if (and mode (= (strcase mode) "D")) (reverse lst) lst)
)

 

(mySort lst '(1 0) nil)   返回: '((1 1) (1 2) (1 3) (2 1) (2 2) (2 3) (3 1) (3 2) (3 3))
(mySort lst '(1 0) "A")  返回: '((1 1) (1 2) (1 3) (2 1) (2 2) (2 3) (3 1) (3 2) (3 3))
(mySort lst '(1 0) "D")  返回: '((3 3) (3 2) (3 1) (2 3) (2 2) (2 1) (1 3) (1 2) (1 1))

发表于 2010-11-10 06:54 | 显示全部楼层

来学习了

慢慢领会

谢谢各位大俠

发表于 2011-7-12 13:00 | 显示全部楼层
先下载,以后总会有用的
发表于 2011-7-12 21:12 | 显示全部楼层
厉害厉害,我来了解下
发表于 2011-12-18 21:55 | 显示全部楼层
meflying 发表于 2003-8-15 15:55
这样就可以了

    ((= (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优先,后面的语句也只能是对原表重新排列啊。
发表于 2011-12-19 18:15 | 显示全部楼层
      确实经典,谢大侠分享
发表于 2011-12-27 21:27 | 显示全部楼层
这个怎么使用了,转换成lisp,输入什么命令了?
发表于 2012-3-10 19:56 | 显示全部楼层
这帖子痕经典,无痕大师,等待你的通用排序程序中。。。。。。。。。。。。。
发表于 2012-4-9 16:08 | 显示全部楼层
晕,我一直也像“无痕”那么想象的! 看到此贴才明白哦!

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

生活就是如此,要么是吧简单的复杂化了 ,,要么是把复杂的想简单了! 就是个纠结啊!
发表于 2012-5-28 10:41 | 显示全部楼层
楼主厉害,我学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-2 17:33 , Processed in 0.728752 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表