我将List
定义为:
val l = List("1", "2", "3")
我想将其转换为字符串
"1:2:3"
以下是一种方法:
l.foldLeft("")((x, y) => x + (if (x == "") "" else ":") +y)
有更优雅的方法吗?
[编辑:进一步说明]
当l
的元素具有“有意义的”toString
方法时,Easy Angel的答案有效。
虽然我l
为List[String]
,l
可以是自定义类型的列表,但不会覆盖toString
方法,例如:
class my(i:Int) {
val x = i
}
我还有一个方法
def getMy(m:my) = "Hello "+m.x
所以我希望使用getMy
的输出而不是默认toString
方法的输出。
答案 0 :(得分:8)
您可以使用mkString
的{{1}}方法:
List
更多信息可以在scaladoc中找到:
http://www.scala-lang.org/api/rc/scala/collection/Iterable.html#mkString:String
作为替代方案,您可以使用l mkString ":"
例如:
reduceLeft
作为对第二个问题的回答:只需将其与l.reduceLeft(_ + ":" + _)
:
map
答案 1 :(得分:2)
使用foldLeft执行此操作的另一种方法:
l.tail.foldLeft(l.head)( (x, y) => x+":"+y )
答案 2 :(得分:1)
其他建议更好,但是当您想保留foldLeft时,可以使用选项:
List("1","2","3").foldLeft(None:Option[String])((o,n)=> o.map(_+":"+n).orElse(Some(n))).get
//res2: String = 1:2:3