wosiguwozai0830 发表于 2023-1-10 09:46:08

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

;列表去除重复项,有重复的保留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
)

liuhe 发表于 2023-1-10 14:43:28

(defun LM:Unique (l)
;;;;;;删除表中重复项无容差
    (if        l
      (cons (car l) (LM:Unique (vl-remove (car l) (cdr l))))
    )
)

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


liuhe 发表于 2023-2-27 16:40:18

正能量的一诺 发表于 2023-2-27 15:34
递归数据多了好像就卡住了,怎么办

我只了解一点,递归是栈之类的,会占用内存。原理是把所有数据读取出来储存在内存中,直到最后一个有返回值,才会回收前面的栈,如果数据很大,就会栈溢出。通俗说法是,用内存换效率,内存不够,就用其他办法吧

liuhe 发表于 2023-1-10 14:44:58

(defun LM:RemoveNth (n l)
;;;;去除第N项
(if (and l (< 0 n))
    (cons (car l) (LM:RemoveNth (1- n) (cdr l)))
    (cdr l)
)
)

这个递归也很精妙

jun353835273 发表于 2023-1-10 10:31:43

(defun delsame(l1 / l2)
(while(setq l2(cons(car l1)l2)l1(vl-remove(car l1)(cdr l1))))
(reverse l2)
)
也是论坛之前看到的,忘了是那个大佬的了。

376394482 发表于 2023-1-10 11:19:24

支持一下         .

Klein 发表于 2023-1-10 12:37:47

jun353835273 发表于 2023-1-10 10:31
也是论坛之前看到的,忘了是那个大佬的了。

这个写法厉害了,简洁粗暴,赞

wosiguwozai0830 发表于 2023-1-10 14:57:54

jun353835273 发表于 2023-1-10 10:31
也是论坛之前看到的,忘了是那个大佬的了。

这写法厉害了

wosiguwozai0830 发表于 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
也是论坛之前看到的,忘了是那个大佬的了。

这写法厉害了,我测试过

magicheno 发表于 2023-1-11 12:25:59

学习了,感谢大佬~~~
页: [1] 2
查看完整版本: 列表去除重复项,有重复的保留1次