3

異なるscala.collectionオブジェクト間で変換する最も効果的な方法は何ですか?

例えば

 val a=scala.collection.mutable.ListBuffer(1,2,0,3)

そして、私は取得したいですscala.collection.mutable.ArrayBuffer

  1. http://docs.scala-lang.org/resources/images/collections.mutable.pngによるBufferと、ArrayBuffer後でに変換することで可能になるはずです。正しい?

  2. 一般的に、共通の祖先を介してscalaコレクションで変換を行うことはできますか?(前の例では、共通の祖先はですBuffer

PS私はhttp://docs.scala-lang.org/overviews/collections/introduction.htmlを読みましたが、さまざまなタイプ間の一般的な変換について何も見つかりませんでした(.toArrayのようなメソッドについては知っています)

どうも

4

2 に答える 2

3

構文的に最も効果的なのはto、2.10で導入された方法です。

def to[Col[_]]: Col[A]

すべての要素をコピーして、このコレクションを別のコレクションに変換します。注:無限サイズのコレクションでは終了しません。

として使用しa.to[scala.collection.mutable.ArrayBuffer]ます。

効率的には、サブタイプをより一般的なコレクションに変換するアップキャストのような変換を行わない限り、変換には要素のコピーが含まれます。あなたの例では、リストバッファをバッファに変換してから配列バッファに変換するかどうかは関係ありませんto。リンクリストから配列に要素をコピーするため、を使用して直接これを行うことができます。

于 2013-03-02T17:22:38.200 に答える
1

質問番号2に答える:

Welcome to Scala version 2.10.0 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_07).
Type in expressions to have them evaluated.
Type :help for more information.

scala> import collection.mutable._
import collection.mutable._

scala> List(1,2,3,4,5)
res0: List[Int] = List(1, 2, 3, 4, 5)

scala> res0.to[ArrayBuffer]
res1: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 3, 4, 5)

scala> res0.to[ListBuffer]
res2: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3, 4, 5)

互換性を維持している限り、必要に応じて変換できます。

scala> res0.to[Map]
<console>:12: error: scala.collection.mutable.Map takes two type parameters, expected: one
              res0.to[Map]
                      ^
于 2013-03-02T17:23:26.667 に答える