找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1139|回复: 7

[求助] [求助]:怎样去除表中相同的元素最有效率??

[复制链接]
发表于 2005-12-4 16:19:27 | 显示全部楼层 |阅读模式

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

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

×
大虾们:
我现在编写一个画单线图程序,遇到点问题大家帮助解决!!

list表中有许多相同的元素,我只想一样保留一个,我怎样才能最有效率去掉呢??
(请原谅我有点c语言的后遗症)SIZE[/SIZE]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 8157个

财富等级: 富甲天下

发表于 2005-12-4 16:43:37 | 显示全部楼层
  1. ;;  by CAB
  2. (defun unique (lst / result)
  3.     (while (setq itm (car lst))
  4.       (setq lst (vl-remove itm lst)
  5.             result (cons itm result)
  6.       )
  7.     )
  8.   )

  9. ;; by MP
  10. (defun unique ( lst / result )
  11.     (foreach item lst
  12.         (if (null (member item result))
  13.             (setq result (cons item result))
  14.         )
  15.     )
  16.     (reverse result)
  17. )

  18. ;; by MP
  19. (defun unique2 ( lst / result )
  20.     (foreach item lst
  21.         (if (null (assoc (car item) result))
  22.             (setq result (cons item result))
  23.         )
  24.     )
  25.     (reverse result)
  26. )

  27. ;; by Fatty
  28. (defun remove-first (lst /)
  29.   (while
  30.     (member (caar lst) (mapcar 'car (cdr lst)))
  31.      (setq lst (vl-remove-if
  32.                 (function (lambda (x)
  33.                              (eq (car x) (caar lst))
  34.                            )
  35.                 )
  36.                 lst
  37.                )
  38.      )
  39.   )
  40.   lst
  41. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-12-4 17:53:41 | 显示全部楼层
http://www.theswamp.org/forum/index.php?topic=7891.0
应该就是underway兄提到的吧
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2005-12-4 18:59:59 | 显示全部楼层
對於表處理,再慢也不會慢到哪裏去!
作爲不同的編程思路和方法,倒是可以借鑒的.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-12-4 19:17:37 | 显示全部楼层
  1. [FONT=courier new](defun LstDelSame (lst / x nl)
  2.   (foreach x lst
  3.     (if        (not (member x nl))
  4.       (setq nl (cons x nl))
  5.     )
  6.   )
  7.   (reverse nl)
  8. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2005-12-4 19:51:25 | 显示全部楼层
最初由 xyp1964 发布
[B]
  1. [FONT=courier new](defun LstDelSame (lst / x nl)
  2.   (foreach x lst
  3.     (if        (not (member x nl))
  4.       (setq nl (cons x nl))
  5.     )
  6.   )
  7.   (reverse nl)
  8. )[/FONT]
[/B]


版主,有個疑問:

程序中nl沒有設初值,一般來講.其初值應該爲nil.但是如果在別的程序中有全局變量nl,是否有時候造成結果不對?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8157个

财富等级: 富甲天下

发表于 2005-12-4 20:56:32 | 显示全部楼层
(defun LstDelSame (lst / x nl)
  (princ "\n Nl = ") (princ nl)     ; <=== Check here, and  you'll got the answer
  (foreach x lst
    (if        (not (member x nl))
      (setq nl (cons x nl))
    )
  )
  (reverse nl)
)

(defun LstDelSame (lst / x)
(princ "\n Nl = ") (princ nl) ; <=== Check here, and you'll got the answer
(foreach x lst
(if (not (member x nl))
(setq nl (cons x nl))
)
)
(reverse nl)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2005-12-4 21:12:37 | 显示全部楼层
最初由 Underway 发布
[B](defun LstDelSame (lst / x nl)
  (princ "\n Nl = ") (princ nl)     ; < ==== Check here, and  you'll got the answer
  (foreach x lst
    (if        (not (member x nl))
      (setq nl (cons x nl))
    )
... [/B]


谢谢解惑!只要在本函数里将变量设为局部变量就行!

将XYP版主的函数改一下.以前老搞不清FOREACH,MAPCAR,LAMBDA的用法.通过上面几个例了,终于豁然!
[PHP](defun LstDelSame (lst / x nl)
  (mapcar
    '(lambda (x)
       (if (not (member x nl))
         (setq nl (cons x nl))
       )
     )
    lst
  )
  (reverse nl)
)[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-28 22:06 , Processed in 0.186853 second(s), 44 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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