找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1522|回复: 15

[] 表剩余重复元素,并消重 XD::List:Dup

[复制链接]

已领礼包: 202个

财富等级: 日进斗金

发表于 2020-5-13 15:35:05 | 显示全部楼层 |阅读模式
函数发布
函数名称: XD::List:Dup
调用格式: (XD::List:Dup lst)
参数说明: lst为表
返回值: 重复的表元素,并消重
函数简介: 经测试,效率较高
函数来源: 原创
函数作者: dyjwyqz5221
适用版本: ACAD 2013+ 
最后更新时间: 2020-05-13
备注: 受newer的消重函数XD::List:RemoveDup的启发,在此基础上修改而成。
演示图片: -

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

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

×
本帖最后由 dyjwyqz5221 于 2020-5-14 08:17 编辑

[Actionscript3] 纯文本查看 复制代码
(defun XD::List:Dup(lst / foo index index1)
	(defun foo (x)
        	(cond
            		((or (if (not (vl-position x index)) (setq index (cons x index)))
				(vl-position x index1)
				);;;or
			)
            		((null (setq index1 (cons x index1))))
        	)
    	)
    	(vl-remove-if
       		'foo
        	lst
    	)
);;;defun

评分

参与人数 1D豆 +5 收起 理由
newer + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

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

已领礼包: 40个

财富等级: 招财进宝

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

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 4个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 4个

财富等级: 恭喜发财

发表于 2020-5-13 17:53:13 | 显示全部楼层
返回(1 2 5 3 2 1 2)有重复元素

评分

参与人数 1D豆 +5 收起 理由
marting + 5 热心帮忙奖!

查看全部评分

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

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

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

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

 楼主| 发表于 2020-5-14 08:19:48 | 显示全部楼层
确实有bug,已修改。再做几个函数,测试一下效率
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

 楼主| 发表于 2020-5-14 08:57:12 | 显示全部楼层
做了几个函数测试了一下
(defun XD::List:Dup(lst / foo index index1)
        (defun foo (x)
                (cond
                            ((or (if (not (vl-position x index)) (setq index (cons x index)))
                                (vl-position x index1)
                                );;;or
                        )
                            ((null (setq index1 (cons x index1))))
                )
            )
            (vl-remove-if
                       'foo
                lst
            )
);;;defun

(defun t1(lst / index index1)
        (mapcar
                '(lambda(x)
                        (cond
                                ((not (vl-position x index))
                                        (setq index (cons x index))
                                )
                                ((and (vl-position x index) (not (vl-position x index1)))
                                        (setq index1 (cons x index1))
                                )
                        );;;cond
                )
                lst
        );;;mapcar
        (reverse index)
);;;defun


(defun t2(lst / index index1)
        (mapcar
                '(lambda(x)
                        (cond
                                ((not (member x index))
                                        (setq index (cons x index))
                                )
                                ((and (member x index) (not (member x index1)))
                                        (setq index1 (cons x index1))
                                )
                        );;;cond
                )
                lst
        );;;mapcar
        (reverse index)
);;;defun

(defun t3(lst / index)
        (while (setq e (car lst))
                (setq lst (cdr lst))
                (if (and (not (vl-position e index)) (vl-position e lst))
                        (setq index (cons e index))
                );;;if
        );;;while
        (reverse index)
);;;defun

(defun t4(lst / index)
        (while (setq e (car lst))
                (setq lst (cdr lst))
                (if (and (not (member e index)) (member e lst))
                        (setq index (cons e index))
                );;;if
        );;;while
        (reverse index)
);;;defun

(defun c:tt(/ lst)
        (repeat 1000
                (setq lst (cons (xdrx_math_rand 0 100) lst))
        )
        (repeat 5
                  (xd::quickbench '((XD::List:Dup lst) (t1 lst) (t2 lst) (t3 lst) (t4 lst)))
        )
          (princ)
);;;defun


CPU:(1x)Intel(R) Core(TM) i7-7700 @ 3.60GHz 4Cores  / Memory:24G / OS:WIN10专业版
Benchmarking .......... done for 1024 iterations. Sorted from fastest.
Statement                    Increment  Time(ms)  Normalize  Relative
-------------------------------------------------------------------------------
(T3 LST)                          1024      1328       1328     17.88 <fastest>
(XD::LIST:DUP LST)                1024      1625       1625     14.61
(T1 LST)                           512      1172       2344     10.13
(T4 LST)                            64      1172      18752      1.27
(T2 LST)                            64      1484      23744      1.00 <slowest>
-------------------------------------------------------------------------------
CPU:(1x)Intel(R) Core(TM) i7-7700 @ 3.60GHz 4Cores  / Memory:24G / OS:WIN10专业版
Benchmarking .......... done for 1024 iterations. Sorted from fastest.
Statement                    Increment  Time(ms)  Normalize  Relative
-------------------------------------------------------------------------------
(T3 LST)                          1024      1984       1984     24.69 <fastest>
(XD::LIST:DUP LST)                 512      1094       2188     22.39
(T1 LST)                           512      1563       3126     15.67
(T4 LST)                            64      1578      25248      1.94
(T2 LST)                            32      1531      48992      1.00 <slowest>
-------------------------------------------------------------------------------
CPU:(1x)Intel(R) Core(TM) i7-7700 @ 3.60GHz 4Cores  / Memory:24G / OS:WIN10专业版
Benchmarking .......... done for 512 iterations. Sorted from fastest.
Statement                    Increment  Time(ms)  Normalize  Relative
-------------------------------------------------------------------------------
(T3 LST)                           512      1125       1125     25.33 <fastest>
(XD::LIST:DUP LST)                 512      1172       1172     24.31
(T1 LST)                           512      1657       1657     17.20
(T4 LST)                            32      1000      16000      1.78
(T2 LST)                            32      1781      28496      1.00 <slowest>
-------------------------------------------------------------------------------
CPU:(1x)Intel(R) Core(TM) i7-7700 @ 3.60GHz 4Cores  / Memory:24G / OS:WIN10专业版
Benchmarking .......... done for 512 iterations. Sorted from fastest.
Statement                    Increment  Time(ms)  Normalize  Relative
-------------------------------------------------------------------------------
(T3 LST)                           512      1188       1188     29.47 <fastest>
(XD::LIST:DUP LST)                 512      1312       1312     26.68
(T1 LST)                           512      1875       1875     18.67
(T4 LST)                            64      1968      15744      2.22
(T2 LST)                            16      1094      35008      1.00 <slowest>
-------------------------------------------------------------------------------
CPU:(1x)Intel(R) Core(TM) i7-7700 @ 3.60GHz 4Cores  / Memory:24G / OS:WIN10专业版
Benchmarking .......... done for 512 iterations. Sorted from fastest.
Statement                    Increment  Time(ms)  Normalize  Relative
-------------------------------------------------------------------------------
(T3 LST)                           512      1203       1203     28.70 <fastest>
(XD::LIST:DUP LST)                 512      1296       1296     26.64
(T1 LST)                           512      1875       1875     18.41
(T4 LST)                            64      1984      15872      2.18
(T2 LST)                            16      1079      34528      1.00 <slowest>
-------------------------------------------------------------------------------

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

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

 楼主| 发表于 2020-5-14 08:58:59 | 显示全部楼层
(defun c:tt(/ lst)
        (repeat 1000
                (setq lst (cons (xdrx_math_rand 0 10) lst))
        )
        (repeat 5
                  (xd::quickbench '((XD::List:Dup lst) (t1 lst) (t2 lst) (t3 lst) (t4 lst)))
        )
          (princ)
);;;defun


CPU:(1x)Intel(R) Core(TM) i7-7700 @ 3.60GHz 4Cores  / Memory:24G / OS:WIN10专业版
Benchmarking .......... done for 2048 iterations. Sorted from fastest.
Statement                    Increment  Time(ms)  Normalize  Relative
-------------------------------------------------------------------------------
(T3 LST)                          2048      1812       1812      4.62 <fastest>
(XD::LIST:DUP LST)                1024      1016       2032      4.12
(T4 LST)                          1024      1360       2720      3.08
(T1 LST)                          1024      1469       2938      2.85
(T2 LST)                           256      1047       8376      1.00 <slowest>
-------------------------------------------------------------------------------
CPU:(1x)Intel(R) Core(TM) i7-7700 @ 3.60GHz 4Cores  / Memory:24G / OS:WIN10专业版
Benchmarking .......... done for 1024 iterations. Sorted from fastest.
Statement                    Increment  Time(ms)  Normalize  Relative
-------------------------------------------------------------------------------
(T3 LST)                          1024      1281       1281      5.76 <fastest>
(XD::LIST:DUP LST)                1024      1500       1500      4.92
(T1 LST)                           512      1140       2280      3.24
(T4 LST)                           512      1469       2938      2.51
(T2 LST)                           256      1844       7376      1.00 <slowest>
-------------------------------------------------------------------------------
CPU:(1x)Intel(R) Core(TM) i7-7700 @ 3.60GHz 4Cores  / Memory:24G / OS:WIN10专业版
Benchmarking .......... done for 1024 iterations. Sorted from fastest.
Statement                    Increment  Time(ms)  Normalize  Relative
-------------------------------------------------------------------------------
(T3 LST)                          1024      1031       1031      4.67 <fastest>
(XD::LIST:DUP LST)                1024      1094       1094      4.40
(T1 LST)                          1024      1547       1547      3.11
(T4 LST)                           512      1094       2188      2.20
(T2 LST)                           256      1203       4812      1.00 <slowest>
-------------------------------------------------------------------------------
CPU:(1x)Intel(R) Core(TM) i7-7700 @ 3.60GHz 4Cores  / Memory:24G / OS:WIN10专业版
Benchmarking .......... done for 2048 iterations. Sorted from fastest.
Statement                    Increment  Time(ms)  Normalize  Relative
-------------------------------------------------------------------------------
(XD::LIST:DUP LST)                2048      1578       1578      3.84 <fastest>
(T3 LST)                          2048      1797       1797      3.37
(T1 LST)                          1024      1172       2344      2.59
(T4 LST)                           512      1297       5188      1.17
(T2 LST)                           512      1515       6060      1.00 <slowest>
-------------------------------------------------------------------------------
CPU:(1x)Intel(R) Core(TM) i7-7700 @ 3.60GHz 4Cores  / Memory:24G / OS:WIN10专业版
Benchmarking .......... done for 1024 iterations. Sorted from fastest.
Statement                    Increment  Time(ms)  Normalize  Relative
-------------------------------------------------------------------------------
(T3 LST)                          1024      1125       1125      5.33 <fastest>
(XD::LIST:DUP LST)                1024      1235       1235      4.86
(T1 LST)                          1024      1781       1781      3.37
(T4 LST)                           512      1281       2562      2.34
(T2 LST)                           256      1500       6000      1.00 <slowest>
-------------------------------------------------------------------------------

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

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

 楼主| 发表于 2020-5-14 09:00:52 | 显示全部楼层
(defun c:tt(/ lst)
        (setq lst '(1 2 1))
        (repeat 5
                  (xd::quickbench '((XD::List:Dup lst) (t1 lst) (t2 lst) (t3 lst) (t4 lst)))
        )
          (princ)
);;;defun



CPU:(1x)Intel(R) Core(TM) i7-7700 @ 3.60GHz 4Cores  / Memory:24G / OS:WIN10专业版
Benchmarking .......... done for 16384 iterations. Sorted from fastest.
Statement                    Increment  Time(ms)  Normalize  Relative
-------------------------------------------------------------------------------
(T3 LST)                         16384      1531       1531      1.65 <fastest>
(T4 LST)                         16384      1578       1578      1.60
(XD::LIST:DUP LST)               16384      1610       1610      1.57
(T1 LST)                          8192      1218       2436      1.04
(T2 LST)                          8192      1266       2532      1.00 <slowest>
-------------------------------------------------------------------------------
CPU:(1x)Intel(R) Core(TM) i7-7700 @ 3.60GHz 4Cores  / Memory:24G / OS:WIN10专业版
Benchmarking .......... done for 8192 iterations. Sorted from fastest.
Statement                    Increment  Time(ms)  Normalize  Relative
-------------------------------------------------------------------------------
(T3 LST)                          8192      1062       1062      1.77 <fastest>
(T4 LST)                          8192      1110       1110      1.69
(XD::LIST:DUP LST)                8192      1125       1125      1.67
(T2 LST)                          8192      1860       1860      1.01
(T1 LST)                          8192      1875       1875      1.00 <slowest>
-------------------------------------------------------------------------------
CPU:(1x)Intel(R) Core(TM) i7-7700 @ 3.60GHz 4Cores  / Memory:24G / OS:WIN10专业版
Benchmarking .......... done for 8192 iterations. Sorted from fastest.
Statement                    Increment  Time(ms)  Normalize  Relative
-------------------------------------------------------------------------------
(T3 LST)                          8192      1078       1078      1.74 <fastest>
(XD::LIST:DUP LST)                8192      1141       1141      1.64
(T4 LST)                          8192      1203       1203      1.56
(T1 LST)                          8192      1844       1844      1.02
(T2 LST)                          8192      1875       1875      1.00 <slowest>
-------------------------------------------------------------------------------
CPU:(1x)Intel(R) Core(TM) i7-7700 @ 3.60GHz 4Cores  / Memory:24G / OS:WIN10专业版
Benchmarking .......... done for 8192 iterations. Sorted from fastest.
Statement                    Increment  Time(ms)  Normalize  Relative
-------------------------------------------------------------------------------
(XD::LIST:DUP LST)                8192      1157       1157      2.19 <fastest>
(T3 LST)                          8192      1407       1407      1.80
(T4 LST)                          8192      1422       1422      1.78
(T1 LST)                          8192      1906       1906      1.33
(T2 LST)                          4096      1265       2530      1.00 <slowest>
-------------------------------------------------------------------------------
CPU:(1x)Intel(R) Core(TM) i7-7700 @ 3.60GHz 4Cores  / Memory:24G / OS:WIN10专业版
Benchmarking .......... done for 8192 iterations. Sorted from fastest.
Statement                    Increment  Time(ms)  Normalize  Relative
-------------------------------------------------------------------------------
(T3 LST)                          8192      1422       1422      1.78 <fastest>
(T4 LST)                          8192      1453       1453      1.74
(XD::LIST:DUP LST)                8192      1484       1484      1.71
(T1 LST)                          4096      1219       2438      1.04
(T2 LST)                          4096      1266       2532      1.00 <slowest>
-------------------------------------------------------------------------------


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

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

 楼主| 发表于 2020-5-14 09:04:51 | 显示全部楼层
表无重复元素,测试
(defun c:tt(/ i lst)
        (setq i 0)
        (repeat 1000
                (setq lst (cons (setq i (1+ I)) lst))
        );;;repeat
        (setq lst (reverse lst))
        (repeat 5
                  (xd::quickbench '((XD::List:Dup lst) (t1 lst) (t2 lst) (t3 lst) (t4 lst)))
        )
          (princ)
)


CPU:(1x)Intel(R) Core(TM) i7-7700 @ 3.60GHz 4Cores  / Memory:24G / OS:WIN10专业版
Benchmarking .......... done for 256 iterations. Sorted from fastest.
Statement                    Increment  Time(ms)  Normalize  Relative
-------------------------------------------------------------------------------
(T3 LST)                           256      1203       1203     17.66 <fastest>
(XD::LIST:DUP LST)                 256      1218       1218     17.44
(T1 LST)                           256      1313       1313     16.18
(T4 LST)                            32      1844      14752      1.44
(T2 LST)                            16      1328      21248      1.00 <slowest>
-------------------------------------------------------------------------------
CPU:(1x)Intel(R) Core(TM) i7-7700 @ 3.60GHz 4Cores  / Memory:24G / OS:WIN10专业版
Benchmarking .......... done for 256 iterations. Sorted from fastest.
Statement                    Increment  Time(ms)  Normalize  Relative
-------------------------------------------------------------------------------
(XD::LIST:DUP LST)                 256      1250       1250     25.01 <fastest>
(T3 LST)                           256      1312       1312     23.83
(T1 LST)                           256      1359       1359     23.01
(T4 LST)                            16      1953      31248      1.00
(T2 LST)                            16      1954      31264      1.00 <slowest>
-------------------------------------------------------------------------------
CPU:(1x)Intel(R) Core(TM) i7-7700 @ 3.60GHz 4Cores  / Memory:24G / OS:WIN10专业版
Benchmarking .......... done for 256 iterations. Sorted from fastest.
Statement                    Increment  Time(ms)  Normalize  Relative
-------------------------------------------------------------------------------
(T3 LST)                           256      1219       1219     17.64 <fastest>
(XD::LIST:DUP LST)                 256      1234       1234     17.43
(T1 LST)                           256      1297       1297     16.58
(T2 LST)                            16      1328      21248      1.01
(T4 LST)                            16      1344      21504      1.00 <slowest>
-------------------------------------------------------------------------------
CPU:(1x)Intel(R) Core(TM) i7-7700 @ 3.60GHz 4Cores  / Memory:24G / OS:WIN10专业版
Benchmarking .......... done for 256 iterations. Sorted from fastest.
Statement                    Increment  Time(ms)  Normalize  Relative
-------------------------------------------------------------------------------
(XD::LIST:DUP LST)                 256      1188       1188     18.09 <fastest>
(T3 LST)                           256      1219       1219     17.63
(T1 LST)                           256      1297       1297     16.57
(T4 LST)                            16      1328      21248      1.01
(T2 LST)                            16      1343      21488      1.00 <slowest>
-------------------------------------------------------------------------------
CPU:(1x)Intel(R) Core(TM) i7-7700 @ 3.60GHz 4Cores  / Memory:24G / OS:WIN10专业版
Benchmarking .......... done for 256 iterations. Sorted from fastest.
Statement                    Increment  Time(ms)  Normalize  Relative
-------------------------------------------------------------------------------
(T3 LST)                           256      1250       1250     17.60 <fastest>
(XD::LIST:DUP LST)                 256      1266       1266     17.38
(T1 LST)                           256      1328       1328     16.57
(T4 LST)                            16      1328      21248      1.04
(T2 LST)                            16      1375      22000      1.00 <slowest>
-------------------------------------------------------------------------------

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

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

 楼主| 发表于 2020-5-14 09:08:07 | 显示全部楼层
经过这几轮测试,得出了这样的结论:
1、xd::list:dup函数t3函数效率差不多,综合起来还是t3函数效率要高一些。
2、vl-position函数要比member函数效率高。

点评

XD::List:RemoveDup 有容差,更通用,你试试修改下你的函数,加入容差功能的,比比哪个效率高。  详情 回复 发表于 2020-5-14 11:13

评分

参与人数 1D豆 +20 贡献 +1 收起 理由
XDSoft + 20 + 1 有始有终奖!

查看全部评分

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2020-5-14 11:13:24 | 显示全部楼层
dyjwyqz5221 发表于 2020-5-14 09:08
经过这几轮测试,得出了这样的结论:
1、xd::list:dup函数t3函数效率差不多,综合起来还是t3函数效率要高 ...

  1. (defun XD::List:RemoveDup (l / ll fuzz)
  2.   (setq fuzz (car (xdrx_document_getprec)))
  3.   (while l
  4.     (setq ll (cons (car l) ll)
  5.           l  (vl-remove-if '(lambda(x)(equal x (car l) fuzz)) l)
  6.     )
  7.   )
  8.   (reverse ll)
  9. )



XD::List:RemoveDup 有容差,更通用,你试试修改下你的函数,加入容差功能的,比比哪个效率高。

点评

你这个函数与下面的函数效率比较: (defun XD::pnts:RemoveDup(lst fuzz / foo index) (defun foo (x) (cond ((xd::list:member-fuzz x index fuzz)) ((null (setq index (  详情 回复 发表于 2020-5-19 10:56
XD::List:RemoveDup函数是消重,XD::List:Dup是剩余表中重复元素并消重,是两码事。  详情 回复 发表于 2020-5-14 11:35
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

 楼主| 发表于 2020-5-14 11:35:00 | 显示全部楼层
XDSoft 发表于 2020-5-14 11:13
XD::List:RemoveDup 有容差,更通用,你试试修改下你的函数,加入容差功能的,比比哪个效率高。

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

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

 楼主| 发表于 2020-5-19 10:56:28 | 显示全部楼层
XDSoft 发表于 2020-5-14 11:13
XD::List:RemoveDup 有容差,更通用,你试试修改下你的函数,加入容差功能的,比比哪个效率高。

你这个函数与下面的函数效率比较:
(defun XD::pnts:RemoveDup(lst fuzz / foo index)
    (defun foo (x)
        (cond
            ((xd::list:member-fuzz x index fuzz))
            ((null (setq index (cons x index))))
        )
    );;;defun
    (vl-remove-if
       'foo
        lst
    );;;vl
)


(defun xd::list:member-fuzz(e lst fuzz)
        (while (and lst (not (equal (car lst) e fuzz)))
                (setq lst (cdr lst))
        );;;while
        (car lst)
)


;;;你这个函数与上面这个函数都属于有误差的消重函数,可以适用于点表类,数字类
测试函数
(defun c:tt(/ pts)
        (setq pts
                (apply 'append
                        (mapcar
                                '(lambda(x)
                                        (xdrx_entity_getstretchpoint x)
                                );;;lambda
                                (xdrx_pickset->ents (ssget))
                        );;;mapcar
                )
        )
        (xdrx_document_setprec 10 0.01)
        (repeat 5
                  (xd::quickbench '((XD::List:RemoveDup pts) (XD::pnts:RemoveDup pts 10.)))
        )
         (princ)
)



测试结果:
CPU:(1x)Intel(R) Core(TM) i7-7700 @ 3.60GHz 4Cores  / Memory:24G / OS:WIN10专业版
Benchmarking ....... done for 2048 iterations. Sorted from fastest.
Statement                    Increment  Time(ms)  Normalize  Relative
-------------------------------------------------------------------------------
(XD::PNTS:REMOVEDUP PTS 10.0)     2048      1516       1516      5.28 <fastest>
(XD::LIST:REMOVEDUP PTS)           256      1000       8000      1.00 <slowest>
-------------------------------------------------------------------------------
CPU:(1x)Intel(R) Core(TM) i7-7700 @ 3.60GHz 4Cores  / Memory:24G / OS:WIN10专业版
Benchmarking ....... done for 2048 iterations. Sorted from fastest.
Statement                    Increment  Time(ms)  Normalize  Relative
-------------------------------------------------------------------------------
(XD::PNTS:REMOVEDUP PTS 10.0)     2048      1531       1531      5.23 <fastest>
(XD::LIST:REMOVEDUP PTS)           256      1000       8000      1.00 <slowest>
-------------------------------------------------------------------------------
CPU:(1x)Intel(R) Core(TM) i7-7700 @ 3.60GHz 4Cores  / Memory:24G / OS:WIN10专业版
Benchmarking ....... done for 2048 iterations. Sorted from fastest.
Statement                    Increment  Time(ms)  Normalize  Relative
-------------------------------------------------------------------------------
(XD::PNTS:REMOVEDUP PTS 10.0)     2048      1515       1515      5.28 <fastest>
(XD::LIST:REMOVEDUP PTS)           256      1000       8000      1.00 <slowest>
-------------------------------------------------------------------------------
CPU:(1x)Intel(R) Core(TM) i7-7700 @ 3.60GHz 4Cores  / Memory:24G / OS:WIN10专业版
Benchmarking ....... done for 2048 iterations. Sorted from fastest.
Statement                    Increment  Time(ms)  Normalize  Relative
-------------------------------------------------------------------------------
(XD::PNTS:REMOVEDUP PTS 10.0)     2048      1515       1515      5.20 <fastest>
(XD::LIST:REMOVEDUP PTS)           512      1969       7876      1.00 <slowest>
-------------------------------------------------------------------------------
CPU:(1x)Intel(R) Core(TM) i7-7700 @ 3.60GHz 4Cores  / Memory:24G / OS:WIN10专业版
Benchmarking ....... done for 2048 iterations. Sorted from fastest.
Statement                    Increment  Time(ms)  Normalize  Relative
-------------------------------------------------------------------------------
(XD::PNTS:REMOVEDUP PTS 10.0)     2048      1500       1500      5.33 <fastest>
(XD::LIST:REMOVEDUP PTS)           256      1000       8000      1.00 <slowest>
-------------------------------------------------------------------------------


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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-25 15:35 , Processed in 0.512389 second(s), 65 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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