明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: NetBee

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

  [复制链接]
发表于 2004-4-3 05:51:00 | 显示全部楼层
meflying发表于2004-4-2 23:16:00实在看不明白楼上说的到底是要说明什么问题, 如下图,假设列表是这个各自各交点的一个表,如果仅按Y排(从小到大),则结果可能会是:(3 1 2 4 6 5 7  8 ...
sorry,我为我刚才的武断表示道歉:)作为补偿,发一个为了测试你的排序效果临时做的lsp用途是调用sort函数在屏幕上取点并标注序号
  1. (defun c:ptsort  (/ pt lst i)    ;ptlst 全局.
  2.    (vl-cmdf ".undo" "be")
  3.    (while (and (princ "\n取点<上一组点表>:") (setq pt (getpoint)))
  4.        (setq lst (cons pt lst))
  5.    )
  6.    (setq  ptlst (if lst lst ptlst))
  7.    (setq do (getint "\n输入排序方式(0=X排序,1=Y排序,2=先X后Y,3=先Y后X):"))
  8.    (setq i 0)
  9.    (if ptlst
  10.        (foreach n (sort ptlst (list do < <))
  11.            (vl-cmdf ".text" n "500" "0" (itoa (setq i (1+ i))) "")
  12.        )
  13.    )
  14.    (vl-cmdf ".undo" "e")
  15.    (princ)
  16. )
运行效果如下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2004-4-3 14:36:00 | 显示全部楼层
其实,要写一个多维数组排序的通用函数也不难的。前面的只能对x,y(即第0,1元素)排序,通用函数应该可以任意指定第几元素。


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


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

点评

无痕啊,你的签名太可怕了。亘古未见!!!!  发表于 2011-12-19 19:56
发表于 2004-4-4 00:44:00 | 显示全部楼层
顶一下,别让掉下去了
发表于 2005-5-15 13:22:00 | 显示全部楼层
现在好像又有人在讨论这样子的问题了,我不知道关于这个问题的讨论是否有了最后的定论。有知道的请给个帖子的地址我看看
发表于 2005-5-16 00:57:00 | 显示全部楼层
无痕发表于2004-4-3 14:36:00其实,要写一个多维数组排序的通用函数也不难的。前面的只能对x,y(即第0,1元素)排序,通用函数应该可以任意指定第几元素。 从代码上,myf和aeo的都已经比较...

刚好想写一个没时间,等着抄了,赫赫。
发表于 2005-5-16 07:53:00 | 显示全部楼层
难到最后是没定论的?
发表于 2005-5-17 11:56:00 | 显示全部楼层

偉個自動排序實例程序




支持R14。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2005-7-11 10:48:00 | 显示全部楼层
楼上的,能对你的程序说明一下吗
发表于 2005-7-11 20:40:00 | 显示全部楼层

楼上的真是AUTOLISP的铁杆FANS,不过用VLISP更简单,而且不用那么长的代码

(setq b '((1 3)(2 2)(1 1)(3 5)(2 4)))

(setq a (vl-sort b
             (function (lambda (e1 e2)
                         (< (cadr e1) (cadr e2)) ) ) ))

返回:((1 1) (2 2) (1 3) (2 4) (3 5))

 (vl-sort a
             (function (lambda (e1 e2)
                         (< (car e1) (car e2)) ) ) )

返回:((1 1) (1 3) (2 2) (2 4) (3 5))

两行就搞掂了,呵

发表于 2010-10-31 18:06:00 | 显示全部楼层
程序很好,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 19:38 , Processed in 0.181322 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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