2

文字列のリストを文字ベクトルのベクトルに変換しようとしています:

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

Stringaを varargs コンストラクターに直接渡すことができますVector:

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

その時点で、別のメソッドを持つことはばかげているように思えます。 breakOut最適化用です。変換したいだけなら、できます

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

リスト要素ごとに 1 つの追加オブジェクトという比較的控えめな費用がかかります。(すべての文字は、メモリを集中的に使用する部分である可能性が最も高いです。)

于 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

もう 1 つの方法は、すべての要素を空のベクターに追加することです。とにかく、変換メソッドを呼び出すと、舞台裏で次のようになります。

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