明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3983|回复: 6

[求助]关于assoc的用法?

  [复制链接]
发表于 2004-5-16 10:09:00 | 显示全部楼层 |阅读模式
assoc可以返回一个点表的某一元素,但如果其中有相同的键值,如何判断有多少个,如何返回指定的。 ((-1 . <图元名: 7ef730e0>) (0 . "CIRCLE") (5 . "114") (102 . "{ACAD_REACTORS")
(330 . <图元名: 7ef73170>) (102 . "}") (330 . <图元名: 7ef55cf8>) (100 .
"AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbCircle") (10
466.982 690.79 0.0) (40 . 8.09887) (210 0.0 0.0 1.0)) 如上,怎么判断330组码有两个,怎么返回其中的某一个。
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2004-5-16 10:23:00 | 显示全部楼层
将以下程序的组码改成自己所需的组码,然后用nth读取


       

本帖子中包含更多资源

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

x
发表于 2004-5-16 10:24:00 | 显示全部楼层
难的, 要用member函数


即如果(member (assoc 330 lst))就会将表中第一项330前面的都去掉,剩下的, 你用cdr取得第一项以后的部分,这样第一个330就在列表中消失了,后面的继续用assoc, 如此类推,直到结束.


你也可以一直循环,判断关键值是不是330,是则提出,不是则继续循环,直到列表结束


efan也学lisp了?
 楼主| 发表于 2004-5-16 10:35:00 | 显示全部楼层
有看过部分Lisp的用法,不过只用来了解一点ACAD的内部原理,像标注、填充与实体是怎么关联之类的。
发表于 2004-5-16 12:43:00 | 显示全部楼层
(setq el (entget (car(entsel)))



                         lst (vl-remove-if '(lambda(x)(/= 330 (car x))) el)


                                                         ;;or (vl-remove-if-not '(lambda(x)(= 330 (car x))) el)


)





实例:返回-&gt; ((330 . &lt;图元名: 7ef7ce78&gt;) (330 . &lt;图元名: 7ef7ce80&gt;) (330 . &lt;图元名: 7ef7cc10&gt;))

点评

这个式子,在测试阶段,经常出现如下图的跳屏,不知道什么原因  发表于 2018-5-18 15:46
发表于 2018-5-18 15:45:15 | 显示全部楼层
请问下无痕大牛,我也用了这个函数,加载应用没有问题,但是在测试阶段,出现下图示的跳屏显示,不知道是什么原因

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-5-16 20:05 , Processed in 0.179361 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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