我正在尝试将字符串列表转换为char矢量的矢量:
import collection.breakOut
def stringsToCharVectors(xs: List[String]) =
xs.map(stringToCharVector)(breakOut) : Vector[Vector[Char]]
def stringToCharVector(x: String) =
x.map(a => a)(breakOut) : Vector[Char]
有没有办法实现stringToCharVector
不涉及身份功能的映射?通常,是否有更短/更好的方法来实施stringsToCharVectors
?
答案 0 :(得分:8)
您可以将String
直接传递给Vector
的varargs构造函数:
def stringToCharVector(x: String) = Vector(x: _*)
此时有一个单独的方法似乎有点愚蠢。 breakOut
用于优化;如果你只想转换,你可以
Vector(xs.map(x => Vector(x: _*)): _*)
每个列表元素一个额外对象的相对适度的费用。 (所有字符很可能都是内存密集型部分。)
答案 1 :(得分:5)
在Scala 2.10中:
scala> val xs = List("hello")
xs: List[String] = List(hello)
scala> xs.map(_.to[Vector]).to[Vector]
res0: Vector[Vector[Char]] = Vector(Vector(h, e, l, l, o))
答案 2 :(得分:1)
另一种方法是将所有元素添加到空Vector中;当你调用转换方法时,这就是幕后发生的事情:
def stringsToCharVectors(xs: List[String]) =
Vector() ++ xs.map(Vector() ++ _)