明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1652|回复: 11

列表去除重复项,有重复的保留1次

[复制链接]
发表于 2023-1-10 09:46:08 | 显示全部楼层 |阅读模式
;列表去除重复项,有重复的保留1次
;(qcchongfu '(1 2 1 2 3 4 5 1))-> (2 3 4 5 1)

(defun qcchongfu(sjb / newb)
        (setq newb sjb)
        (foreach a sjb
                (setq newb(append (vl-remove a newb)(list a)))
        )
        newb
)
发表于 2023-1-10 14:43:28 | 显示全部楼层
  1. (defun LM:Unique (l)
  2. ;;;;;;删除表中重复项无容差
  3.     (if        l
  4.       (cons (car l) (LM:Unique (vl-remove (car l) (cdr l))))
  5.     )
  6.   )


leemac大神的,可以是嵌套表,对元素没有要求,数字。字符串、表都可以。楼主发的只能一个表。
leemac  有一些递归函数很精妙


发表于 2023-2-27 16:40:18 | 显示全部楼层
正能量的一诺 发表于 2023-2-27 15:34
递归数据多了好像就卡住了,怎么办

我只了解一点,递归是栈之类的,会占用内存。原理是把所有数据读取出来储存在内存中,直到最后一个有返回值,才会回收前面的栈,如果数据很大,就会栈溢出。通俗说法是,用内存换效率,内存不够,就用其他办法吧
发表于 2023-1-10 14:44:58 | 显示全部楼层
  1. (defun LM:RemoveNth (n l)
  2. ;;;;去除第N项
  3.   (if (and l (< 0 n))
  4.     (cons (car l) (LM:RemoveNth (1- n) (cdr l)))
  5.     (cdr l)
  6.   )
  7. )

  8. 这个递归也很精妙
发表于 2023-1-10 10:31:43 | 显示全部楼层
  1. (defun delsame(l1 / l2)
  2.   (while(setq l2(cons(car l1)l2)l1(vl-remove(car l1)(cdr l1))))
  3.   (reverse l2)
  4.   )

也是论坛之前看到的,忘了是那个大佬的了。
发表于 2023-1-10 11:19:24 | 显示全部楼层
支持一下         .
发表于 2023-1-10 12:37:47 | 显示全部楼层
jun353835273 发表于 2023-1-10 10:31
也是论坛之前看到的,忘了是那个大佬的了。

这个写法厉害了,简洁粗暴,赞
 楼主| 发表于 2023-1-10 14:57:54 | 显示全部楼层
jun353835273 发表于 2023-1-10 10:31
也是论坛之前看到的,忘了是那个大佬的了。

这写法厉害了
 楼主| 发表于 2023-1-10 15:03:01 | 显示全部楼层
liuhe 发表于 2023-1-10 14:43
leemac大神的,可以是嵌套表,对元素没有要求,数字。字符串、表都可以。楼主发的只能一个表。
leemac ...

果然很精妙,学习了
发表于 2023-1-10 21:01:44 | 显示全部楼层
jun353835273 发表于 2023-1-10 10:31
也是论坛之前看到的,忘了是那个大佬的了。

这写法厉害了,我测试过
发表于 2023-1-11 12:25:59 | 显示全部楼层
学习了,感谢大佬~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 07:32 , Processed in 0.198007 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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