乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 123|回复: 8

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

[复制链接]

44

主题

222

帖子

12

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
396
发表于 2003-8-15 13:46:00 | 显示全部楼层 |阅读模式
[fly]能进行坐标点的排序!
你是想进行先X从上到下后Y从左到右
或是先X从下到上后Y从右到左
或是。。。。。。。。。。。。。。。
哈哈。。。。
通吃!!!!!
我吃。。。
我吃。。。。。。。。。。。。。。
。。。。。。。。。。。。。
---------------------------------------------------------------------------------
该函数是根据《乐筑天下》上的函数库中领悟而得
在此向乐筑天下致谢!!!!!!!!!![glow=255,red,2]文字[/glow]
回复

使用道具 举报

76

主题

595

帖子

10

银币

中流砥柱

Rank: 25

铜币
899
发表于 2003-8-15 14:09:00 | 显示全部楼层
我才从“隔壁”过来,看到过  此文。
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2003-8-15 15:40:00 | 显示全部楼层
不只怎么,从表中取出的函数不能使用。
我也做了一个,增加两个功能,单独给x、y排序。
fun参数如下:
(0  (car e1) (car e2))
    )
  )
  (defun des2(e1 e2)
    (if (= (caddr fun) ' (cadr e1) (cadr e2))
    )
  )
  (cond
    ((= (car fun) 0) (vl-sort lst 'des))
    ((= (car fun) 1) (vl-sort lst 'des2))
    ((= (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))
  )
)
[/code]
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2003-8-15 15:55:00 | 显示全部楼层

这样就可以了
  1. (defun sort(lst fun / a)
  2.   (defun des(e1 e2)
  3.     ((eval (cadr fun)) (car e1) (car e2))
  4.   )
  5.   (defun des2(e1 e2)
  6.     ((eval (caddr fun)) (cadr e1) (cadr e2))
  7.   )
  8.   (cond
  9.     ((= (car fun) 0) (vl-sort lst 'des))
  10.     ((= (car fun) 1) (vl-sort lst 'des2))
  11.     ((= (car fun) 2) (setq a (vl-sort lst 'des)) (vl-sort a 'des2))
  12.     ((= (car fun) 3) (setq a (vl-sort lst 'des2)) (vl-sort a 'des))
  13.   )
  14. )
回复

使用道具 举报

5

主题

66

帖子

8

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
86
发表于 2003-8-15 23:59:00 | 显示全部楼层
[code]
(defun sort-xy(li no / s-x s-y)
(defun s-x (li )(vl-sort li '(lambda(x y)())  x:
(sort-xy li '(>))    x:>
(sort-xy li '(nil >))    y:>
(sort-xy li '(> >) ......
回复

使用道具 举报

44

主题

222

帖子

12

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
396
发表于 2003-8-18 15:08:00 | 显示全部楼层
调用:(NetBee_px slist (list 1 ))
回复

使用道具 举报

44

主题

222

帖子

12

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
396
发表于 2003-8-18 15:13:00 | 显示全部楼层
调用:(NetBee_px slist (list 1 ))
其中slist:((x y)(x y)(x y).........)
后面一个条件表,只能用list生成
回复

使用道具 举报

20

主题

872

帖子

10

银币

中流砥柱

Rank: 25

铜币
952
发表于 2004-4-2 22:38:00 | 显示全部楼层

其实,有一个概念我想跟大家说一下。前几次看到类似帖子的时候就想说了,但有次回复不成功,后来就算了。这回不知道正不正常,要是不能发,也就再不说了。什么是对多维数组排序? 什么是先x,后y?这些和按x 或按y排序有何区别?看这个贴的朋友们你们自己都清楚么?
先看看 meflying 和aeo的例子
(setq lst '((0 1 0)(1 0 0)(0 1 1)(0 1 2)(1 0 1)(2 0 1)(0 2 2)))
(sort-xy lst '(nil 返回(1 0 0) (1 0 1) (2 0 1) (0 1 0) (0 1 1) (0 1 2) (0 2 2))
(sort lst '(1 返回(1 0 0) (1 0 1) (2 0 1) (0 1 0) (0 1 1) (0 1 2) (0 2 2))
不知道大家看明白没有:)
根本没有什么先x后y,或先y后x排序。先x后y的效果和按y排序是一样的,先y后x同理!返回结果都是按照fun中定义的表的最后一种方式排序,因此,先什么后什么的说法或那部分程序语句是多余的,一个美丽的光环而已。
什么是真正的先x后y排序?
那就是:多维数组中先按x排序,在x数值***相同***的元素中,再按照y排序。
好了,概念清楚了。程序也将呼之欲出了吧? :)
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2004-4-2 23:16:00 | 显示全部楼层

实在看不明白楼上说的到底是要说明什么问题, 如下图,假设列表是这个各自各交点的一个表,如果仅按Y排(从小到大),则结果可能会是:(3 1 2 4 6 5 7        8 9),而如果先按X排,再按Y排,则将得到(1 2 3 4 5 6 7 8 9)——用数字表示此处的点坐标。
你说的“多维数组中先按x排序,在x数值***相同***的元素中,再按照y排序”,则跟先按Y排,再按X排,结果是一样的...而同先X,再Y则不是一回事

rs43kdl4xwk.JPG

rs43kdl4xwk.JPG
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-8-15 18:26 , Processed in 2.974468 second(s), 73 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表