找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1069|回复: 7

[] (XD::List:del)删除表lst2中表lst1表lst2共有的元素

[复制链接]

已领礼包: 33个

财富等级: 招财进宝

发表于 2019-1-22 15:07:22 | 显示全部楼层 |阅读模式
函数发布
函数名称: XD::List:del
调用格式: (XD::List:del lst1 lst2)
参数说明: lst1:参照表
lst2:被删除表
返回值: 更新后的Lst2表
函数简介: ;删除表2中表1表2共同的元素
函数来源: 原创
函数作者: CSY0415
适用版本: 不限 
最后更新时间: 2019-01-22
备注: -
演示图片: -

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

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

×
本帖最后由 newer 于 2019-1-24 15:11 编辑

(defun XD::List:del ( lst1 lst2 / x)
(foreach x lst1
   (if (member x lst2)
    (setq lst2 (vl-remove x lst2))
   )
   )   lst2
)

评分

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

查看全部评分

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

已领礼包: 19个

财富等级: 恭喜发财

发表于 2019-1-22 17:56:58 | 显示全部楼层
谢谢楼主分享代码,但有点问题,最后要加上一个返回值lst2才行,否则对于最后一次没进入 (setq lst2....)的结果就不对了,返回NIL

比如:

命令: !aa
(1 2 4 3)

命令: !bb
(1 2 4 56 6)

命令: (xd::list:del aa bb)
nil


[Actionscript3] 纯文本查看 复制代码
(defun XD::List:del ( lst1 lst2 / x)
(foreach x lst1
   (if (member x lst2)
    (setq lst2 (vl-remove x lst2))
   )
   )
   lst2
)



命令: (xd::list:del aa bb)
(56 6)

点评

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

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2019-1-22 18:23:42 | 显示全部楼层

下面代码也可以做

  1. (defun xd::list:del2 (l1 l2)
  2.   (vl-remove-if '(lambda (x) (member x l1)) l2)
  3. )


测试下楼主的和上面的效率

  1. (defun c:tt ()
  2.   (setq b nil)
  3.   (repeat 100 (setq b (cons (xdrx_math_rand 1 100) b)))
  4.   (setq c nil)
  5.   (repeat 100 (setq c (cons (xdrx_math_rand 1 100) c)))
  6.   (xd::quickbench '((XD::List:del1 b c) (XD::List:del2 b c)))
  7.   (princ)
  8. )




命令: TT

CPU:(1x)Intel(R) Core(TM) i7-4790 @ 3.60GHz 4Cores  / Memory:16G / OS:WIN10企业版
Benchmarking ....... done for 4096 iterations. Sorted from fastest.
Statement                    Increment  Time(ms)  Normalize  Relative
-------------------------------------------------------------------------------
(XD::LIST:DEL B C)               4096      1578       1578      2.89 <fastest>
(XD::LIST:DEL2 B C)               1024      1141       4564      1.00 <slowest>
-------------------------------------------------------------------------------

命令:
命令: TT

CPU:(1x)Intel(R) Core(TM) i7-4790 @ 3.60GHz 4Cores  / Memory:16G / OS:WIN10企业版
Benchmarking ....... done for 4096 iterations. Sorted from fastest.
Statement                    Increment  Time(ms)  Normalize  Relative
-------------------------------------------------------------------------------
(XD::LIST:DEL B C)               4096      1750       1750      3.00 <fastest>
(XD::LIST:DEL2 B C)               1024      1312       5248      1.00 <slowest>
-------------------------------------------------------------------------------

命令:
命令: tt

CPU:(1x)Intel(R) Core(TM) i7-4790 @ 3.60GHz 4Cores  / Memory:16G / OS:WIN10企业版
Benchmarking ....... done for 2048 iterations. Sorted from fastest.
Statement                    Increment  Time(ms)  Normalize  Relative
-------------------------------------------------------------------------------
(XD::LIST:DEL B C)               2048      1047       1047      2.89 <fastest>
(XD::LIST:DEL2 B C)               1024      1515       3030      1.00 <slowest>
-------------------------------------------------------------------------------

命令:
命令: (xd::list:del1 b c)
(41 21 59 65 73 57 52 50 1 3 50 81 1 65 50 81 78 72 72 1 41 44 11 41 73 20 72
57 44 1 65 1)

命令: tt
CPU:(1x)Intel(R) Core(TM) i7-4790 @ 3.60GHz 4Cores  / Memory:16G / OS:WIN10企业版
Benchmarking ....... done for 4096 iterations. Sorted from fastest.
Statement                    Increment  Time(ms)  Normalize  Relative
-------------------------------------------------------------------------------
(XD::LIST:DEL B C)               4096      1344       1344      3.16 <fastest>
(XD::LIST:DEL2 B C)               1024      1063       4252      1.00 <slowest>
-------------------------------------------------------------------------------


可见,楼主的代码效率要更高,所以尽量别用vl-remove-if

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

使用道具 举报

已领礼包: 7个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 33个

财富等级: 招财进宝

 楼主| 发表于 2019-1-24 09:43:19 | 显示全部楼层
Lisphk 发表于 2019-1-22 17:56
谢谢楼主分享代码,但有点问题,最后要加上一个返回值lst2才行,否则对于最后一次没进入 (setq lst2....)的 ...

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

使用道具 举报

已领礼包: 16个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

发表于 2020-4-29 15:00:48 | 显示全部楼层
直接去掉if判断,效率会更快一些,约提高20%的效率
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

发表于 2020-4-29 15:12:05 | 显示全部楼层
本帖最后由 dyjwyqz5221 于 2020-4-29 15:14 编辑

经测试,用mapcar效率会更高一些
[Actionscript3] 纯文本查看 复制代码
(defun XD::List:del1(lst1 lst)
	(mapcar
		'(lambda(x)
    			(setq lst (vl-remove x lst))
   		)
		lst1
   	)
   	lst
)



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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 00:24 , Processed in 0.381406 second(s), 46 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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