2013-06-13 9 views
8

私はScalaのプログラミングを始めたときに大きな疑いを持っています。私はスカラーでmapメソッドがどのように動作するか知りたいです。シーケンシャルに処理されているのか、マルチスレッドに処理されていますか?さらに重要なのは、なぜmapメソッドがwhileまたはforeachより速いのかを知りたいと思いますか?Scalaのマップメソッドと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'が内部的に 'list'を構築するため、' foreach'は 'map'より速くなければなりません。どんなスクリプトでも速くなるように 'foreach'が表示されます – Jatin

+0

私はコードでテストしましたが、foreachやwhileなどと比較して、scalaの方が速いです。 –

答えて

17

まず、2つの操作は無限に異なります。 mapは、関数A => Bを与えられたリストの変換であるのに対して、foreachは、Unitを生成し、通常、副作用のために使用されます。

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

mapは、呼び出されたコレクションがパラレルコレクションである場合にのみパラレルになります。だからあなたの例では:

list.map(x => x) 

は平行とシーケンシャルですが、

list.par.map(x => x) 

は、平行になるされていません。明らかに、この使用法に考慮する必要があるさまざまな警告があります。同じ並列コレクションにはforeachメソッドもあります。

+0

ありがとうgpampara :-) –

+0

シンプルで、短い、正確です。驚くばかり.. :) –

関連する問題