+ -
当前位置:首页 → 问答吧 → 关于使用map的疑问 - 读简简单单讲sort

关于使用map的疑问 - 读简简单单讲sort

时间:2010-08-15

来源:互联网

看了仙子的简简单单讲sort,有些想法

我记得map的效率是比较低的,再次测试一下,在debian, perl 5.10.1下,大约map要慢4到5倍
  1. for (0..20000000) {
  2. $_;
  3. }

  4. map {$_++} 0..20000000;
复制代码
虽然map写出来的代码很漂亮,但是这么大的性能差距,为什么不足以使得这些转换使用foreach呢

作者: ztkx   发布时间: 2010-08-15

本帖最后由 黑色阳光_cu 于 2010-08-15 01:28 编辑

“为什么不足以使得这些转换使用foreach呢”

什么意思?


map慢的原因,无非就是map一个大列表的时候,真的去产生那个大列表。在列表不很大的情况下,map和foreach没多大的差距。

作者: 黑色阳光_cu   发布时间: 2010-08-15

本帖最后由 ztkx 于 2010-08-15 02:05 编辑

回复 黑色阳光_cu

一次map一個大列表,和多次map一個小列表, 到底哪一個更費力呢?
我知道這個問題一定會有人問的,所以我特地測試了一下,
  1. map {$_++}, 0..200
复制代码
  1. foreach(0..100) { map { $_++ }, 0..2 }
复制代码
的區別
結果是,後者更慢,原因不難清楚,

作者: ztkx   发布时间: 2010-08-15

其实这里看到的 map 慢的一个重要原因是,for (0..20000000) 是不会创建如此大一个 list 的,但是 map 却会,于是,map 慢了一大截!
如果测试对比 这种 ( 0..200 ) 这种小list,却又没多大可比性,所以,应该说,大的 list ,for有专门的优化,推荐优先使用!

至于你后面的测试例子,很好理解嘛,前者一个函数调用,后者,多次函数调用,函数调用也是要有栈的更新啊,如此频繁的调用,能不慢嘛……

作者: dugu072_cu   发布时间: 2010-08-15