我對R語言有一些經驗,現在我想嘗試Scala語言。在R語言中,我可以將一個值賦給一個向量的許多元素,例如在Scala中爲數組中的多個元素賦值1
(xs <- 1:10)
#[1] 1 2 3 4 5 6 7 8 9 10
k <- 3
xs[1:k] <- xs[k+1]
xs
# 4 4 4 4 5 6 7 8 9 10
它將k + 1元素的值分配給指數從1到k的所有元素。是否有可能在Scala中沒有循環(我的意思是數組在Scale中)?我知道有切片方法,但它只返回一個數組的值,不能使用此方法修改數組的元素。
更甚者,如果我只想更改元素的值並且不想從集合中添加/刪除元素,我應該使用Array還是ArrayBuffer?
在R中需要避免顯式循環,因爲它們比內置函數(在C++中爲循環)慢得多。我能否假設在Scala中不需要避免循環,並且它們與嵌入方法/函數一樣快? – bartoszukm 2014-12-04 22:50:15
是的。 Scala中的循環完全正確,性能明智。 – sjrd 2014-12-04 23:43:06
@bartoszukm如果你真的關心循環的性能,我想使用'cfor'宏向你推薦https://github.com/non/spire。我們廣泛使用它,並看到了良好的速度增加。從本質上講,它將你的循環編譯成尾循環函數,編譯成while循環,產生很好的語法,但速度仍然很快。 – 2014-12-05 13:38:42