2012-03-31 57 views
3

是的,它是一個有趣的問題,但我想學習使用收藏操作,如地圖,減少和正確摺疊。更好的一個班輪生成n個空格

我這樣做:

scala> Range(0,3) map(_=>" ") reduceLeft(_+_) 
res15: java.lang.String = " " 

什麼是產生n個空間,其中包括收集運行的更好,習慣的方法?

回答

15

技術上,以下是「集經營」,我想,既然StringOps是在scala.collection.immutable包:

scala> " " * 3 
res1: String = " " 

這裏發生的事情是, " "通過scala.Predef.augmentString隱式轉換爲StringOps的實例,然後調用StringOps上的*方法。


更新:我的意思是這部分原因是由於一個玩笑,因爲這顯然不是你所說的「集合操作」 - 它不是像mapreduce一個高階函數是什麼意思。我一定會用真實的代碼來使用我的版本(StringOps版本),但是如果您想要使用更高階的函數(出於教育原因和類似問題等),我認爲您的版本與慣用語非常接近。我個人使用until來構建範圍,reduce而不是reduceLeft(因爲串聯是關聯的) - 即,幾乎是virtualeyes在他或她的答案中寫的。

+1

不錯的一個,沒想到斯卡拉做紅寶石/ Groovy,但的確如此;-) – virtualeyes 2012-03-31 18:04:42

2
1 until 10 map (_=> " ") reduce(_+_) 

是另一個也許更可讀的方式

1

我覺得foldLeft是更恰當:

Range(0,3).foldLeft("")((str, i) => str + " ") 
4

不一樣優雅的特拉維斯的解決方案,但恕我直言迄今爲止的第二個最優雅的方式:

List.fill (3)(' ').mkString