明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2441|回复: 9

[求助]分类排列表

[复制链接]
发表于 2005-12-21 08:41:00 | 显示全部楼层 |阅读模式
请问各位兄弟:有表'(ent1 ent2 ent3 ent4 ……)怎样把有相同名称(如块名)的对象排在一起?最后像这样返回((ent2 ent4) (ent1 ent3 ent5 ent6) (ent8 ent10) ……),谢谢!
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2005-12-21 09:32:00 | 显示全部楼层
我是这样写的,请版主帮忙评判一下(如:代码对不对?代码还可以怎样优化?),谢谢!
  1.   (while lst
  2.     (setq Name (GetName (nth 0 lst)))
  3.     (foreach n lst
  4.       (if (= Name (GetName n))
  5. (progn
  6.    (setq lst2 (append lst2 (list n)))
  7.    (setq lst (vl-remove n lst))
  8. )
  9.       )
  10.     )
  11.     (setq lst3 (cons lst2 lst3))
  12.     (setq lst2 nil)
  13.   )
  14.   (reverse lst3)
发表于 2005-12-21 09:36:00 | 显示全部楼层

参考(希望你看懂),不懂再来..8-)

http://bbs.mjtd.com/forum.php?mod=viewthread&tid=18410

 楼主| 发表于 2005-12-21 09:59:00 | 显示全部楼层

谢谢龙兄!我看了,好长,注解又是乱码,没看懂*_*

我的表不用删除重复的对象,我上面那个代码有问题吗?我找不出来了。

发表于 2005-12-21 10:41:00 | 显示全部楼层
  1. 程序不完全,,,LST???? GETNAME ???
  2. 主要看是这段
  3. (while (> (sslength SS) COUNT)
  4.     (setq EN (ssname SS COUNT))
  5.     (setq COUNT (1+ COUNT))
  6.     (GET-TAG EN)
  7.     (if (assoc TAG LI)
  8.       (setq LI (subst (append (assoc TAG LI) (list EN))
  9.         (assoc TAG LI)
  10.         LI
  11.         )
  12.       )     ;如果 li 表里有 tag 这个标签了,就将实体加入到 li 表里去
  13.       (setq LI (cons (list TAG EN) LI)) ;如果没有就新增一个
  14.     )
  15.   )     ;结束循环;;到这里表 li 鹰该是 ((tag 1 2 3...)(tag 1 2 3 ...))
 楼主| 发表于 2005-12-21 10:45:00 | 显示全部楼层

呵呵,我只写了关键的部分,lst就是表,getname就是得到对象名称的子函数。

 楼主| 发表于 2005-12-21 10:57:00 | 显示全部楼层
  1. ;;;我试过你的方法,好像不行,所以就用笨方法写了这个:
  2. (while lst
  3.     (setq Name (GetName (nth 0 lst))) ;得到表lst的第一个对象名称
  4.     (foreach n lst        ;遍历表
  5.       (if (= Name (GetName n)) ;如果找到与第一个对象名称相同的对象
  6. (progn
  7.    (setq lst2 (append lst2 (list n))) ;就新lst2建一个表用来保存
  8.    (setq lst (vl-remove n lst)) ;并且从原始表中删除它们,得到下一次while循环的新表lst
  9. )
  10.       )
  11.     )
  12.     (setq lst3 (cons lst2 lst3))      ;新建一个表lst3用来保存最终结果
  13.     (setq lst2 nil)
  14.   )
  15.   (reverse lst3)
发表于 2005-12-21 11:02:00 | 显示全部楼层
  1. ;;参考看看
  2. (defun LSTDIV&SORT (LST / ENT LST1 LST2 LST3 N NAME)
  3.   (setq N 0)
  4.   (if LST
  5.     (progn
  6.       (repeat (sslength LST)
  7. (setq ENT (ssname LST N))
  8. (if (setq LST3 (assoc (setq NAME (GETFACTORYNAME ENT)) LST2))
  9.    (progn
  10.      (setq LST1 (append LST3 (list ENT)))
  11.      (setq LST2 (subst LST1 LST3 LST2))
  12.    )
  13.    (setq LST2 (cons (list NAME ENT) LST2))
  14. )
  15. (setq N (1+ N))
  16.       )
  17.     )
  18.   )
  19.   LST2
  20. )
  21. (defun GETFACTORYNAME (ENAME)
  22.   (cdr (assoc 2 (entget ENAME)))
  23. )
  24. (defun C:TT (/ SS)
  25.   (setq SS (ssget
  26.       "X"
  27.       (list '(0 . "INSERT")
  28.      (cons 410 (getvar "CTAB"))
  29.      (cons 2 "~*`**")
  30.      ;;'(-3 ("TBH_INFO"))
  31.       )
  32.     )
  33.   )
  34.   (LSTDIV&SORT SS)
  35. )
 楼主| 发表于 2005-12-21 12:15:00 | 显示全部楼层
谢谢龙兄!
发表于 2012-10-19 14:57:14 | 显示全部楼层
龙龙仔 发表于 2005-12-21 09:36
参考(希望你看懂),不懂再来..8-)
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=18410

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

本版积分规则

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

GMT+8, 2025-6-6 17:46 , Processed in 0.174831 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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