找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3929|回复: 9

[每日一码] 删除表重复的元素

[复制链接]

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-3-31 18:52:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
  1. (defun remove_doubles (lst /)
  2.   (if lst
  3.     (cons (car lst) (remove_doubles (vl-remove (car lst) lst)))
  4.   )
  5. )


命令: (setq a '(1 2 43 3 2 3 1))
(1 2 43 3 2 3 1)

命令: (REMOVE_DOUBLES a)
(1 2 43 3)

命令: (setq b (list 1 "ab" '(2 3 "3") "ab" '(2 3 "3")))
(1 "ab" (2 3 "3") "ab" (2 3 "3"))
命令: (REMOVE_DOUBLES b)
(1 "ab" (2 3 "3"))

命令: (setq c (list (/ pi 3) 34 (/ pi 3)))
(1.0472 34 1.0472)
命令: (REMOVE_DOUBLES c)
(1.0472 34)

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 8987个

财富等级: 富甲天下

发表于 2017-4-1 07:08:30 | 显示全部楼层
谢谢! marting 分享程序!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 5601个

财富等级: 富甲天下

发表于 2017-4-1 08:03:11 | 显示全部楼层
太经典! 十分佩服楼主的才识!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2017-4-1 10:40:00 | 显示全部楼层
这段代码使用了递归,对于数据量比较大的情况,运行时间比较长,并且还可能有迭代层数限制(约20000层)。
为了测试本段代码是否受迭代层数限制,特构建一个超大表:
  1. (setq i   0
  2.       lst nil
  3. )
  4. (repeat 20000
  5.   (setq lst (cons i (cons i lst))
  6.         i   (1+ i)
  7.   )
  8. )

运行(remove_doubles lst),acad超时死机,没有得出结论。

根据你的代码,改写了一段:
  1. (defun remove_doubles1 (lst / a lst1)
  2.   (while
  3.     (setq a   (car lst)
  4.           lst (vl-remove a lst)
  5.     )
  6.      (setq lst1 (cons a lst1))
  7.   )
  8.   (reverse (cons a lst1))
  9. )

运行(car (remove_doubles1 lst)),返回19999,结果正确,速度也还可以接受。

评分

参与人数 1D豆 +5 收起 理由
newer + 5 技术引导讨论和指点奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-4-1 11:20:18 | 显示全部楼层

递归变迭代了,好

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2017-4-1 11:35:48 | 显示全部楼层
普通循环比递归要快很多,测试过的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-4-1 11:45:15 | 显示全部楼层

空间换时间的,各有利弊,看具体应用场合了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2017-4-1 11:55:13 | 显示全部楼层

递归一般既不省空间,也不省时间
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

发表于 2019-10-29 16:22:38 | 显示全部楼层
经测试,还是(XD::List:RemoveDup lst)快
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2020-2-26 22:12:54 | 显示全部楼层
好帖,学习!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-22 02:07 , Processed in 0.351693 second(s), 51 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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