是的,它是一個有趣的問題,但我想學習使用收藏操作,如地圖,減少和正確摺疊。更好的一個班輪生成n個空格
我這樣做:
scala> Range(0,3) map(_=>" ") reduceLeft(_+_)
res15: java.lang.String = " "
什麼是產生n個空間,其中包括收集運行的更好,習慣的方法?
是的,它是一個有趣的問題,但我想學習使用收藏操作,如地圖,減少和正確摺疊。更好的一個班輪生成n個空格
我這樣做:
scala> Range(0,3) map(_=>" ") reduceLeft(_+_)
res15: java.lang.String = " "
什麼是產生n個空間,其中包括收集運行的更好,習慣的方法?
技術上,以下是「集經營」,我想,既然StringOps
是在scala.collection.immutable
包:
scala> " " * 3
res1: String = " "
這裏發生的事情是, " "
通過scala.Predef.augmentString
隱式轉換爲StringOps
的實例,然後調用StringOps
上的*
方法。
更新:我的意思是這部分原因是由於一個玩笑,因爲這顯然不是你所說的「集合操作」 - 它不是像map
或reduce
一個高階函數是什麼意思。我一定會用真實的代碼來使用我的版本(StringOps
版本),但是如果您想要使用更高階的函數(出於教育原因和類似問題等),我認爲您的版本與慣用語非常接近。我個人使用until
來構建範圍,reduce
而不是reduceLeft
(因爲串聯是關聯的) - 即,幾乎是virtualeyes在他或她的答案中寫的。
1 until 10 map (_=> " ") reduce(_+_)
是另一個也許更可讀的方式
我覺得foldLeft
是更恰當:
Range(0,3).foldLeft("")((str, i) => str + " ")
不一樣優雅的特拉維斯的解決方案,但恕我直言迄今爲止的第二個最優雅的方式:
List.fill (3)(' ').mkString
不錯的一個,沒想到斯卡拉做紅寶石/ Groovy,但的確如此;-) – virtualeyes 2012-03-31 18:04:42