更好的一个衬垫生成n个空格

时间:2012-03-31 17:49:00

标签: scala

是的,这是一个有趣的问题,但我想学习使用集合操作,如map,reduce和fold。

我这样做了:

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

使用集合操作生成n个空格的更好,惯用的方法是什么?

4 个答案:

答案 0 :(得分:15)

从技术上讲,以下是“收集操作”,我想,因为StringOpsscala.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 + " ")