ここで私は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の場合は3Gaborがコメントで答えたように、あなたは使いたいです 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)