【问题标题】:Difference between map and foreach method in Scala? [duplicate]Scala中map和foreach方法的区别? [复制]
【发布时间】:2013-06-09 10:22:36
【问题描述】:

当我开始编写 Scala 时,我确实有一个很大的疑问。我想知道 scala 中的 map 方法是如何工作的。无论是顺序处理还是多线程处理?更重要的是我想知道为什么map 方法比whileforeach 更快?

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

【问题讨论】:

  • 你怎么知道mapforeach快?
  • 事实上,foreach 应该比map 更快,因为在map 内部构建list 在上述情况下foreach 不构建。任何脚本都显示foreach 更快
  • 好吧,我用代码进行了测试,与 foreach 或 while 等相比,scala 中的(即 map)表达式的结果更快。
  • @Jatin:你不认为println需要更多的时间来执行(因为它是一个系统调用)比一个简单的对象创建,它只触发GC(如果GC管理一个大足够的堆)。

标签: scala


【解决方案1】:

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

我猜想foreachmap 相比,在执行所需的周期方面“更快”,map 作为函数的结果创建了一个新集合(在这种情况下)。但是比较这两者真的是比较苹果和橘子。

map 只有在调用它的集合是并行集合时才会并行。所以在你的例子中:

list.map(x => x)

不是并行的,是顺序的,但是

list.par.map(x => x)

将是平行的。显然,这种用法需要考虑各种警告。同一个并行集合也有一个foreach 方法。

【讨论】:

  • 简单、简短、准确。太棒了.. :)
  • 很好解释
猜你喜欢
  • 2013-03-28
  • 2016-02-02
  • 1970-01-01
  • 2017-12-17
  • 1970-01-01
  • 2010-09-26
  • 2016-03-29
相关资源
最近更新 更多