我开始编写Scala时遇到了一个很大的疑问。我想知道如何在scala中使用map
方法。无论是顺序处理还是多线程处理?更重要的是,我想知道为什么map
方法比while
或foreach
更快?斯卡拉地图和foreach方法之间的区别?
val list = List(1,2,3,45,12)
list.map(x => x)
list.foreach(x => println(x))
我开始编写Scala时遇到了一个很大的疑问。我想知道如何在scala中使用map
方法。无论是顺序处理还是多线程处理?更重要的是,我想知道为什么map
方法比while
或foreach
更快?斯卡拉地图和foreach方法之间的区别?
val list = List(1,2,3,45,12)
list.map(x => x)
list.foreach(x => println(x))
首先,这两种操作是无限的不同。 map
是给定函数A => B
的列表的变换,而foreach
产生Unit
并且通常用于副作用。
我猜想foreach
在执行所需的周期方面比“map
”更快,它创建了一个新的集合(在本例中)作为函数的结果。但比较这两者实际上是比较苹果和橘子。
map
只有在它被调用的集合是并行集合时才会是并行的。因此,在你的例子:
list.map(x => x)
不平行且是连续的,但
list.par.map(x => x)
是平行的。这种用法显然有不同的注意事项需要考虑。同样的平行集合也有一个foreach
方法。
谢谢gpampara :-) –
简单,简短,准确。真棒.. :) –
你怎么知道'map'比'foreach'快? – Jatin
实际上,'foreach'应该比map更快,因为在上面的情况下'map'构建了一个'list',因为'foreach'没有构建。任何脚本显示'foreach'更快 – Jatin
好吧,我用代码进行了测试,结果(即地图)表达式在scala中比foreach或while等快。 –