List [String] - >矢量[向量[字符]]

时间:2012-09-12 09:30:52

标签: string list scala vector char

我正在尝试将字符串列表转换为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

3 个答案:

答案 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() ++ _)