【已解决】去除列表中的重复项
本帖最后由 kucha007 于 2023-4-13 09:31 编辑这个函数可以去除列表中的重复元素
;删除列表中重复的元素
(defun K:DelSame (Lst)
(if Lst (cons (car Lst) (K:DelSame (vl-remove (car Lst) (cdr Lst)))))
)
但这样用,输出的结果却没有任何变化,有大佬知道是为什么吗?
(setq ss (ssget "F" (list (setq StaPt (getpoint)) (setq EndPt (getpoint)))));获取栏选选择集
(setq IniLst
(vl-remove-if-not
'(lambda (x) (<= (distance x StaPt) (+ 10.0 (distance StaPt EndPt))))
(vl-sort
(apply 'append (mapcar '(lambda (x) (mapcar 'cadr (cdddr x))) (ssnamex ss)));获取栏选交点
'(lambda (x y) (< (distance StaPt x) (distance StaPt y)));离起点越近越靠前
);交点排序
);过滤点:排除大于最大距离的点
)
(setq NewLst (K:DelSame IniLst));输出的结果没有删除重复项
本帖最后由 kucha007 于 2023-4-13 14:49 编辑
试了几次最后发现是精度的问题,在leemac这里找到了更好的模糊函数
http://www.lee-mac.com/uniqueduplicate.html
可以去除列表中的重复项
((1176.34 591.869 0.0) (1176.34 591.869 0.0) (1176.34 736.047 0.0) (1176.34
736.047 0.0) (1176.34 870.96 0.0) (1176.34 870.96 0.0) (1176.34 987.671 0.0)
(1176.34 987.671 0.0) (1176.34 1081.11 0.0) (1176.34 1081.11 0.0))
(setq NewLst (K:DelSame IniLst))得到
((1176.34 591.869 0.0) (1176.34 736.047 0.0) (1176.34 870.96 0.0) (1176.34
987.671 0.0) (1176.34 1081.11 0.0))
飞雪神光 发表于 2023-4-13 02:12
((1176.34 591.869 0.0) (1176.34 591.869 0.0) (1176.34 736.047 0.0) (1176.34
736.047 0.0) (1176.3 ...
感谢。。我昨天试了半天不行,今天重启电脑居然可以了 笨办法,新建一个空表AA,对于BB中的元素,
如果不在AA里面,就添加到AA里面,
如果在AA里面,就不添加进去。
这样不也就去重了吗? xiaomm250 发表于 2023-4-13 10:35
笨办法,新建一个空表AA,对于BB中的元素,
如果不在AA里面,就添加到AA里面,
如果在AA里面,就不添加进 ...
是的,只不过感觉这种方法不够妙:lol kucha007 发表于 2023-4-13 11:24
是的,只不过感觉这种方法不够妙
最笨的办法才是最好的办法! xiaomm250 发表于 2023-4-18 09:58
最笨的办法才是最好的办法!
lee mac的递归就很nice kucha007 发表于 2023-4-18 10:24
lee mac的递归就很nice
他的办法很难读懂,很不好!
页:
[1]