是的,这是一个有趣的问题,但我想学习使用集合操作,如map,reduce和fold。
我这样做了:
scala> Range(0,3) map(_=>" ") reduceLeft(_+_)
res15: java.lang.String = " "
使用集合操作生成n个空格的更好,惯用的方法是什么?
答案 0 :(得分:15)
从技术上讲,以下是“收集操作”,我想,因为StringOps
在scala.collection.immutable
包中:
scala> " " * 3
res1: String = " "
这里发生的事情是" "
被scala.Predef.augmentString
隐式转换为StringOps
的实例,然后调用*
上的StringOps
方法。
更新:我的意思是这部分是一种玩笑,因为这显然不是“收集操作”的意思 - 这不是像map
这样的高阶函数或reduce
。我肯定在实际代码中使用我的版本(StringOps
版本),但是如果你想使用高阶函数(出于教育原因,类似问题等),我觉得你的版本很漂亮接近惯用语。我个人使用until
来构建范围而reduce
而不是reduceLeft
(因为连接是关联的) - 几乎就是virtualeyes在他或她的回答中写的。
答案 1 :(得分:4)
不像特拉维斯解决方案那么优雅,但到目前为止,这是第二个最优雅的方式:
List.fill (3)(' ').mkString
答案 2 :(得分:2)
1 until 10 map (_=> " ") reduce(_+_)
是另一种可能更具可读性的方法
答案 3 :(得分:1)
我认为foldLeft
更合适:
Range(0,3).foldLeft("")((str, i) => str + " ")