0
我想知道它們何時都在做同樣的事情,在第二條語句中使用第一條語句的可能用例是什麼。在Scala中映射和性能比較
val xs = List[Int](1,2,3,4,5,6)
的號碼清單:
for (x <- xs if x%2 == 0)
yield x*10
一樣:
xs.filter(_%2 == 0).map(_*10)
我想知道它們何時都在做同樣的事情,在第二條語句中使用第一條語句的可能用例是什麼。在Scala中映射和性能比較
val xs = List[Int](1,2,3,4,5,6)
的號碼清單:
for (x <- xs if x%2 == 0)
yield x*10
一樣:
xs.filter(_%2 == 0).map(_*10)
我認爲這是沒有性能上的差異。使用引擎蓋下的for
循環的代碼將被翻譯成代碼filter
和map
(詳細信息可能因Scala版本而異)。這是你想要使用哪個版本的問題。有關更多詳細信息,請參見answer。
謝謝:)如果操作在火花RDD上執行,您會認爲會發生什麼? (我的意思是,如果xs是RDD?) –
將for循環轉換爲map/for代碼由編譯器執行。這意味着它應該以相同的方式工作,而不管使用什麼樣的收集。 –
有道理:)謝謝。 –