15

Scala のプログラミングを始めたとき、1 つの大きな疑問がありました。mapscalaのメソッドがどのように機能するか知りたいです。順次処理かマルチスレッド処理か? mapさらに重要なことに、メソッドが or よりも速い理由を知りたいですwhileforeach?

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

1 に答える 1

31

まず、2 つの操作は無限に異なります。mapfunction が与えられたリストの変換ですが、A => B通常は副作用のために使用されますforeachUnit

関数の結果として新しいコレクション(この場合)を作成する場合foreachと比較して、実行に必要なサイクルの点で「高速」であると思います。mapしかし、これら2つを比較することは、実際にはリンゴとオレンジを比較しています.

map呼び出されるコレクションが並列コレクションである場合にのみ、並列になります。あなたの例では:

list.map(x => x)

並列ではなく順次ですが、

list.par.map(x => x)

平行だろう。この使用法には、考慮に入れる必要があるさまざまな注意事項があることは明らかです。同じ並列コレクションにもforeachメソッドがあります。

于 2013-06-13T06:28:33.233 に答える