2013-06-13 50 views
8

我开始编写Scala时遇到了一个很大的疑问。我想知道如何在scala中使用map方法。无论是顺序处理还是多线程处理?更重要的是,我想知道为什么map方法比whileforeach更快?斯卡拉地图和foreach方法之间的区别?

val list = List(1,2,3,45,12) 
list.map(x => x) 
list.foreach(x => println(x)) 
+4

你怎么知道'map'比'foreach'快? – Jatin

+4

实际上,'foreach'应该比map更快,因为在上面的情况下'map'构建了一个'list',因为'foreach'没有构建。任何脚本显示'foreach'更快 – Jatin

+0

好吧,我用代码进行了测试,结果(即地图)表达式在scala中比foreach或while等快。 –

回答

17

首先,这两种操作是无限的不同。 map是给定函数A => B的列表的变换,而foreach产生Unit并且通常用于副作用。

我猜想foreach在执行所需的周期方面比“map”更快,它创建了一个新的集合(在本例中)作为函数的结果。但比较这两者实际上是比较苹果和橘子。

map只有在它被调用的集合是并行集合时才会是并行的。因此,在你的例子:

list.map(x => x) 

不平行且是连续的,但

list.par.map(x => x) 

是平行的。这种用法显然有不同的注意事项需要考虑。同样的平行集合也有一个foreach方法。

+0

谢谢gpampara :-) –

+0

简单,简短,准确。真棒.. :) –