不変なリストを設定する - スカラー

ここで私は2つのリストを作成します。各リストは可変または不変です。

var mutableList = scala.collection.mutable.MutableList[String]()
//> mutableList  : scala.collection.mutable.MutableList[String] = MutableList()
//|

for (a <- 1 to 100) {
mutableList += a.toString
}

println(mutableList.size);                      //> 100
val immutableList = List[String]()              //> immutableList  : List[String] = List()

for (a <- 1 to 100) {
immutableList :+ a.toString
}

println(immutableList.size);                    //> 0

immutableListのサイズを表示すると、これは、forループ内で、immutableListを指していない新しい参照が作成されるためです。ループ内から不変リストを生成するのと同等の機能はありますか?

回答:

回答№1の場合は3

Gaborがコメントで答えたように、あなたは使いたいです foldあるいはforやforを続けて yield。彼が説明していないのは、なぜあなたが0のサイズを得ているのかということです。その理由は、 immutableList :+ a.toString 毎回新しいリストを返していますが、これは使用していません。の immutableList まさにそれは不変です。

Scalaではすべてが式であるため、何かを返すことに注意してください。だから、あなたはあなたの定期的に回すことができます for (これは forEach)を追加することによって、理解に yield 以下のように

  val immutableList = for (a <- 1 to 100) yield a.toString

これは次のようになります。

(1 to 100).map(_.toString)

回答№2の場合は1

完全さのために、方法 tabulate 不変変数を作成して生成することを可能にします List例えば次のように

List.tabulate(100)(a => a.toString)

または同等に

List.tabulate(100)(_.toString)