0

現時点では、MutableList で map 関数を使用しようとしています。これは、for ループで反復するよりもエレガントだからです。

私が次のことをするとき:

scala> ml
res2: scala.collection.mutable.MutableList[Double] = MutableList(1.0, 2.0)

だから私はこのような MutableList を持っています。

scala> ml.map{ t:(Double) => t+0.2}
res3: scala.collection.mutable.LinearSeq[Double] = MutableList(1.2, 2.2)

LinearSeq が返ってきました。MutableList を取り戻したい。MutableLists のマップ関数はこれを行う正しい方法ではないと思いますか? または、LinearSeq から MutableList に移行する簡単な方法はありますか?

4

2 に答える 2

1

標準ドキュメントからのように:

可変リスト

MutableListは、単一のリンクされたリストと、そのリストの終端の空のノードを参照するポインターで構成されますこれにより、ターミナル ノードを検索するためにリストをトラバースする必要がなくなるため、リストの追加は一定時間の操作になります。MutableListは現在、Scala でのmutable.LinearSeqの標準実装です。

返さLinearSeqれたものが実際にはMutableList=> 同じアクセス時間として実装されていることを意味します

于 2013-01-10T10:43:22.967 に答える
1

pagoda_5b が述べたようにmutable.LinearSeq、 と同じ操作が可能になりMutableListます。一般に、特性を直接インスタンス化する必要があります。たとえば、次のものが必要な場合:

  • (キー -> 値) ペアを格納するためのマップ、Map() の呼び出し
  • 物事のリストを格納する Seq、Seq() を呼び出す
  • 一連のものを格納するように設定し、Set() を呼び出します
  • 線形ランダム アクセス時間を持つ Seq、IndexedSeq() を呼び出す
  • 等..

また、 と の両方が一定のアクセス時間MutableListを持つ一方で、どちらも一定のランダムアクセス時間を持たないことに注意してください。LinearSeqheadlinearSeq(n)head

変更可能なバージョンが必要な場合は、たとえば を追加import scala.collection.mutableして使用するだけです。mutable.Seq()(技術的には可能ですがimport scala.collection.mutable.Seq、変更可能なすべてのコレクションの前にパッケージ名を付けるのが良いコーディング スタイルと考えられています)

于 2013-01-10T18:18:24.070 に答える