明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3086|回复: 8

如何过滤列表中的重复值

[复制链接]
发表于 2004-7-6 18:44:00 | 显示全部楼层 |阅读模式
如何过滤列表中的重复出现的数值


如将


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


过滤后成


(WL1 WL2 WL0        WL3 WL4 WL5 )


请大家帮助
发表于 2004-7-6 19:59:00 | 显示全部楼层
(DEFUN c:TT (/ LST RET)
(SETQ LST '(WL1 WL2 WL0 WL1 WL3 WL4 WL5 WL3 WL4 WL5))
(FOREACH ATM LST
(IF (NOT (MEMBER ATM RET))
(SETQ RET (CONS ATM RET))
)
)
(reverse RET)
)
发表于 2004-7-7 09:00:00 | 显示全部楼层
  1. (setq lst '(WL1 WL2 WL0 WL1 WL3 WL4 WL5 WL3 WL4 WL5))
  2. (mapcar 'read(vl-sort (mapcar 'vl-symbol-name lst) '< ))
  3. ->(WL0 WL1 WL2 WL3 WL4 WL5)

点评

表顺序变化了。。。  发表于 2011-11-12 15:35
发表于 2004-7-7 23:31:00 | 显示全部楼层
无痕发表于2004-7-7 9: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 WL...
楼主的是"数值" WL?都是一个数, vl-sort恐怕不行.
发表于 2004-7-8 08:52:00 | 显示全部楼层
  1. 楼主的是"数值"     WL?都是一个数, vl-sort恐怕不行.
  2. 吹毛求疵!!!!!!!!!
复制代码
发表于 2004-7-8 10:48:00 | 显示全部楼层
aeo000000发表于2004-7-7 23:31:00以下是引用无痕在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 21:45:00 | 显示全部楼层
已能满足我的要求啦,多谢大家!
发表于 2011-11-12 14:29:11 | 显示全部楼层
无痕 发表于 2004-7-8 10:48
我理解楼主的wl?是变量,我写的也是对变量名进行过滤。如果是数值,那就不用说了吧?直接vl-sort

要是带小数点的数字怎么办啊
发表于 2011-11-12 15:36:40 | 显示全部楼层
本帖最后由 yjr111 于 2011-11-12 16:49 编辑

刚刚知道程序有效率问题,foreach确实比vl-remove-if慢很多,修改alin的程序后测试一下速度至少快4倍以上
  1. ;;;;;;;;删除重复表元素后组成新表,且不改变原表重复表元素的第一个出现的位置;;;;;;;;;;;
  2. (defun deldup2(lst)
  3. (setq ret '())
  4. (vl-remove-if (function (lambda(x)(IF (NOT (MEMBER x RET))
  5. (SETQ RET (CONS x RET))nil)))lst)
  6. (reverse RET)
  7.   )

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

本版积分规则

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

GMT+8, 2025-6-10 23:53 , Processed in 0.183120 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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