[求助]关于assoc的用法?
assoc可以返回一个点表的某一元素,但如果其中有相同的键值,如何判断有多少个,如何返回指定的。((-1 . <图元名: 7ef730e0>) (0 . "CIRCLE") (5 . "114") (102 . "{ACAD_REACTORS") <BR>(330 . <图元名: 7ef73170>) (102 . "}") (330 . <图元名: 7ef55cf8>) (100 . <BR>"AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbCircle") (10 <BR>466.982 690.79 0.0) (40 . 8.09887) (210 0.0 0.0 1.0))
如上,怎么判断330组码有两个,怎么返回其中的某一个。 将以下程序的组码改成自己所需的组码,然后用nth读取
难的, 要用member函数
即如果(member (assoc 330 lst))就会将表中第一项330前面的都去掉,剩下的, 你用cdr取得第一项以后的部分,这样第一个330就在列表中消失了,后面的继续用assoc, 如此类推,直到结束.
你也可以一直循环,判断关键值是不是330,是则提出,不是则继续循环,直到列表结束
efan也学lisp了? 有看过部分Lisp的用法,不过只用来了解一点ACAD的内部原理,像标注、填充与实体是怎么关联之类的。 (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)
)
实例:返回-> ((330 . <图元名: 7ef7ce78>) (330 . <图元名: 7ef7ce80>) (330 . <图元名: 7ef7cc10>)) 请问下无痕大牛,我也用了这个函数,加载应用没有问题,但是在测试阶段,出现下图示的跳屏显示,不知道是什么原因
页:
[1]