0

そのように空のListBuffer[ListBuffer[(String, Int)]]()初期化があり、数値が与えられたので、nそれを埋めたいと思いn ListBuffer[(String, Int)]ます。

たとえば、if n=2thenListBuffer[(String, Int)]内で2 つを初期化できますListBuffer[ListBuffer[(String, Int)]]()。時間をループnし、insertAll 関数を使用して空のリストを挿入しようとしましたが、うまくいきませんでした。

4

1 に答える 1

3

塗りつぶしを使用

fill定義済みの要素でデータ構造を埋めるための標準の Scala ライブラリ関数です。その非常に便利で、多くの入力を節約できます。

ListBuffer.fill(100)(ListBuffer("Scala" -> 1))

スカラ REPL

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

scala> ListBuffer.fill(100)(ListBuffer("Scala" -> 1))
res4: scala.collection.mutable.ListBuffer[scala.collection.mutable.ListBuffer[(String, Int)]] = ListBuffer(ListBuffer((Scala,1)), ListBuffer((Scala,1)), ListBuffer((Scala,1)), ListBuffer((Scala,1)), ListBuffer((Scala,1)) ...

標準ライブラリの実装を埋める

def fill[A](n: Int)(elem: => A): CC[A] = {
    val b = newBuilder[A]
    b.sizeHint(n)
    var i = 0
    while (i < n) {
      b += elem
      i += 1
    }
    b.result()
  }

上記の実装は、1 次元データ構造用です。

一般的な提案

JavaのようにScalaを使用しているようです。これは良くない。明らかな利益のために物事を行うための機能的な方法を受け入れます。

コレクションの代わりに のimmutableようなコレクションを使用します。文字列の理由がない限り、変更可能なコレクションを使用しないでください。ListVectormutable

不変リストを使用して同じことができます

List.fill(100)(List("scala" -> 1))

scala -> 1と同じです("scala", 1)

于 2016-11-08T21:12:34.590 に答える