如何过滤列表中的重复值
如何过滤列表中的重复出现的数值如将
(WL1 WL2 WL0 WL1 WL3 WL4 WL5 WL3 WL4 WL5)
过滤后成
(WL1 WL2 WL0 WL3 WL4 WL5 )
请大家帮助 (DEFUN c:TT (/ LST RET)<BR> (SETQ LST '(WL1 WL2 WL0 WL1 WL3 WL4 WL5 WL3 WL4 WL5))<BR> (FOREACH ATM LST<BR> (IF (NOT (MEMBER ATM RET))<BR> (SETQ RET (CONS ATM RET))<BR> )<BR> )<BR> (reverse RET)<BR>) (setq lst '(WL1 WL2 WL0 WL1 WL3 WL4 WL5 WL3 WL4 WL5))
(mapcar 'read(vl-sort (mapcar 'vl-symbol-name lst) '< ))
->(WL0 WL1 WL2 WL3 WL4 WL5) 无痕发表于2004-7-7 9:00:00static/image/common/back.gif(setq lst '(WL1 WL2 WL0 WL1 WL3 WL4 WL5 WL3 WL4 WL5))(mapcar 'read(vl-sort (mapcar 'vl-symbol-name lst) '< ))->(WL0 WL1 WL2 WL...
楼主的是"数值" WL?都是一个数,
vl-sort恐怕不行.<BR> 楼主的是"数值" WL?都是一个数, vl-sort恐怕不行.
吹毛求疵!!!!!!!!! aeo000000发表于2004-7-7 23:31:00static/image/common/back.gif以下是引用无痕在2004-7-7 9:00:14的发言: (setq lst '(WL1 WL2 WL0 WL1 WL3 WL4 WL5 WL3 WL4 WL5))(mapc...我理解楼主的wl?是变量,我写的也是对变量名进行过滤。如果是数值,那就不用说了吧?直接vl-sort
已能满足我的要求啦,多谢大家! 无痕 发表于 2004-7-8 10:48 static/image/common/back.gif
我理解楼主的wl?是变量,我写的也是对变量名进行过滤。如果是数值,那就不用说了吧?直接vl-sort
要是带小数点的数字怎么办啊 本帖最后由 yjr111 于 2011-11-12 16:49 编辑
刚刚知道程序有效率问题,foreach确实比vl-remove-if慢很多,修改alin的程序后测试一下速度至少快4倍以上
;;;;;;;;删除重复表元素后组成新表,且不改变原表重复表元素的第一个出现的位置;;;;;;;;;;;
(defun deldup2(lst)
(setq ret '())
(vl-remove-if (function (lambda(x)(IF (NOT (MEMBER x RET))
(SETQ RET (CONS x RET))nil)))lst)
(reverse RET)
)
页:
[1]