2

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

4

3 回答 3

8

您可以将 aString直接传递给 varargs 构造函数Vector

def stringToCharVector(x: String) = Vector(x: _*)

在这一点上,有一个单独的方法似乎有点愚蠢。 breakOut用于优化;如果你只想转换,你可以

Vector(xs.map(x => Vector(x: _*)): _*)

以相对适度的成本为每个列表元素增加一个对象。(所有字符很可能是内存密集型部分。)

于 2012-09-12T09:46:49.713 回答
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))
于 2012-09-12T10:41:28.813 回答
1

另一种方法是将所有元素添加到一个空的 Vector 中;无论如何,当您调用转换方法时,这就是幕后发生的事情:

def stringsToCharVectors(xs: List[String]) =
    Vector() ++ xs.map(Vector() ++ _)
于 2012-09-13T01:50:22.540 回答