walong 发表于 2004-7-6 18:44:00

如何过滤列表中的重复值

如何过滤列表中的重复出现的数值


如将


(WL1 WL2 WL0 WL1 WL3 WL4 WL5 WL3 WL4 WL5)


过滤后成


(WL1 WL2 WL0        WL3 WL4 WL5 )


请大家帮助

alin 发表于 2004-7-6 19:59:00

(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>)

无痕 发表于 2004-7-7 09:00:00

(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)

aeo000000 发表于 2004-7-7 23:31:00

无痕发表于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) '&lt; ))-&gt;(WL0 WL1 WL2 WL...


楼主的是"数值"               WL?都是一个数,


vl-sort恐怕不行.<BR>

meflying 发表于 2004-7-8 08:52:00

楼主的是"数值"   WL?都是一个数, vl-sort恐怕不行.
吹毛求疵!!!!!!!!!

无痕 发表于 2004-7-8 10:48:00

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

walong 发表于 2004-7-8 21:45:00

已能满足我的要求啦,多谢大家!

caizeping 发表于 2011-11-12 14:29:11

无痕 发表于 2004-7-8 10:48 static/image/common/back.gif
我理解楼主的wl?是变量,我写的也是对变量名进行过滤。如果是数值,那就不用说了吧?直接vl-sort

要是带小数点的数字怎么办啊

yjr111 发表于 2011-11-12 15:36:40

本帖最后由 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]
查看完整版本: 如何过滤列表中的重复值