找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: pengfei2010

[研讨] mapcar效率与lambda函数有关

[复制链接]
发表于 2013-6-3 22:50:49 | 显示全部楼层
不会是在调试时测试时间吧{:soso_e120:},mapcar在调试时是比较慢的

点评

请您说明白一点 您是说需要编译后在测试 速度吗?  详情 回复 发表于 2013-6-3 23:15
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-6-3 23:03:27 | 显示全部楼层
pengfei2010 发表于 2013-6-3 22:26
难道是我的cad问题,同样的代码 在我电脑上会相差这么大?

17楼的代码和你的不一样了,你的MAPCAR里面很多降低效率的地方,你测试下17楼的和DNBCGRASS朋友的。

你怎么不让人家改你的代码啊,你的代码拖累了MAPCAR啊。

算法是和你一样的,只是改完了比你效率高。

点评

上面的其他函数 while、repeat和foreach都没有过滤,如果都过滤,那他们也会快很多!  详情 回复 发表于 2013-6-3 23:18
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-6-3 23:08:34 | 显示全部楼层
本帖最后由 newer 于 2013-6-3 23:10 编辑
pengfei2010 发表于 2013-6-3 22:24
晕倒,不知道你们在搞什么,不能修改我的程序,要不然算法就不公平了!!!我是在同一种算法下测试的!

迷糊了啊,我为了将就你的流程,MAPCAR分了好几段了,最后让dnbcgrass朋友又精简了下。

我的流程就是你的流程啊,把你效率低的地方给修改了。

你还不让修改你的代码,测试MAPCAR的效率。那是MAPCAR的问题吗?

我给你写的代码,完成的是你一样的事。
你的代码有问题如下:

1、APPEND 极大的拖慢了速度。

2、取顶点的代码,你没用VL-REMOVE-IF-NOT 而是认为的自己加入判断,又降低了效率。你对比下17楼的代码是怎么求出来顶点的。程序流程和你一样,只是用了更有效率的办法。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-6-3 23:12:40 | 显示全部楼层
pengfei2010 发表于 2013-6-3 22:26
为什么你们用mapcar会这么快啊啊,我用mapcar会要好长时间。另外 千万不要改我的代码!!!

因为我们的MAPCAR内部比你的效率高啊,你还不让改你的MAPCAR代码,那还测试什么啊。

点评

不能先过滤,那样就不公平!因为上面的代码都没有过滤!还有 我单独测试append这一句代码,基本是不耗时的  详情 回复 发表于 2013-6-3 23:16
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3256个

财富等级: 富可敌国

 楼主| 发表于 2013-6-3 23:14:18 | 显示全部楼层
newer 发表于 2013-6-3 21:43
对于刚才说的

(setq zmlst (apply 'append (mapcar '(lambda(x) (entget x)) ents)))(length zmlst)

不能先过滤,那样就不公平!因为上面的代码都没有过滤哦!还有 我单独测试这一句代码,基本是不耗时的

点评

你仔细看了我给你修改的代码了吗? 我先过滤哪个了? 我的每行代码都对应你的,把你每行里面效率低的给改进了。 告诉你别用APPEND,你非要用,那关MAPCAR慢不慢什么事啊 告诉你用VL-REMOVE-IF-NOT 去取  详情 回复 发表于 2013-6-3 23:26
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3256个

财富等级: 富可敌国

 楼主| 发表于 2013-6-3 23:15:05 | 显示全部楼层
QiaoCheng 发表于 2013-6-3 22:50
不会是在调试时测试时间吧,mapcar在调试时是比较慢的

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

使用道具 举报

已领礼包: 3256个

财富等级: 富可敌国

 楼主| 发表于 2013-6-3 23:16:13 | 显示全部楼层
newer 发表于 2013-6-3 23:12
因为我们的MAPCAR内部比你的效率高啊,你还不让改你的MAPCAR代码,那还测试什么啊。

不能先过滤,那样就不公平!因为上面的代码都没有过滤!还有  我单独测试append这一句代码,基本是不耗时的

点评

上面的其他函数 while、repeat和foreach都没有过滤,如果都过来,那他们也会快很多!  详情 回复 发表于 2013-6-3 23:17
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3256个

财富等级: 富可敌国

 楼主| 发表于 2013-6-3 23:17:26 | 显示全部楼层
pengfei2010 发表于 2013-6-3 23:16
不能先过滤,那样就不公平!因为上面的代码都没有过滤!还有  我单独测试append这一句代码,基本是不耗时 ...

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

使用道具 举报

已领礼包: 3256个

财富等级: 富可敌国

 楼主| 发表于 2013-6-3 23:18:42 | 显示全部楼层
XDSoft 发表于 2013-6-3 23:03
17楼的代码和你的不一样了,你的MAPCAR里面很多降低效率的地方,你测试下17楼的和DNBCGRASS朋友的。

...

上面的其他函数 while、repeat和foreach都没有过滤,如果都过滤,那他们也会快很多!

点评

你用APPEND链接两个表,不耗时,10个表也不耗时,你APPEND 1000个,10000个看看。 上面都帮你分析了,即使你想要APPEND,也不是应该在ENTGT数据表那,因为那有很多无用的东西在表里面,你先取下顶点,剔除没  详情 回复 发表于 2013-6-3 23:32
那你改改代码吧,让他们快起来。  详情 回复 发表于 2013-6-3 23:22
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-6-3 23:22:48 | 显示全部楼层
pengfei2010 发表于 2013-6-3 23:18
上面的其他函数 while、repeat和foreach都没有过滤,如果都过滤,那他们也会快很多!

那你改改代码吧,让他们快起来。

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-6-3 23:26:39 | 显示全部楼层
本帖最后由 newer 于 2013-6-3 23:33 编辑
pengfei2010 发表于 2013-6-3 23:14
不能先过滤,那样就不公平!因为上面的代码都没有过滤哦!还有 我单独测试这一句代码,基本是不耗时的

你仔细看了我给你修改的代码了吗?

我先过滤哪个了?

我的每行代码都对应你的,把你每行里面效率低的给改进了。

告诉你别用APPEND,你非要用,那关MAPCAR慢不慢什么事啊

告诉你用VL-REMOVE-IF-NOT 去取顶点,你非要自己去判断写IF,IF里面还有APPEND,跟MAPCAR快慢又有什么关系啊。

感觉你好像认定了MAPCAR就不如WHILE似的,让一个函数快起来不容易,但要让一个函数慢下来,办法太多了。

点评

谢谢版主的指点,我一会改写所有代码 再放上来测试,全采用高效率算法  详情 回复 发表于 2013-6-4 12:30
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-6-3 23:32:00 | 显示全部楼层
pengfei2010 发表于 2013-6-3 23:18
上面的其他函数 while、repeat和foreach都没有过滤,如果都过滤,那他们也会快很多!
还有 我单独测试这一句代码,基本是不耗时的

你用APPEND链接两个表,不耗时,10个表也不耗时,你APPEND 1000个,10000个看看。

上面都帮你分析了,即使你想要APPEND,也不是应该在ENTGET数据表那,因为那有很多无用的东西在表里面,你先取下顶点,剔除没用的数据后,然后在APPEND,也比你那样写快。

另外还跟你说了,你在MAPCAR 取顶点的时候,还有APPEND,这个APPEND就不是运行几次而已了。

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

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2013-6-3 23:38:08 | 显示全部楼层
哈哈,这帖子看着喜庆,都不困了。

不是什么东西外面放个MAPCAR就快了的。

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

使用道具 举报

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

使用道具 举报

发表于 2013-6-4 00:30:01 | 显示全部楼层
标题还是正确的!看你lambda里面放什么函数!如果全放低效率函数。就不信耗不死mapcar.
另外if函数还算高效,相比cond.and.or这些来说!记得好像这四个函数cond最慢!

点评

你说一下 测试思路,怎么比较准确的测试两个函数的速度呢  详情 回复 发表于 2013-6-4 12:32
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 08:24 , Processed in 0.465122 second(s), 65 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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