มีหลายวิธีในการสร้างรายการที่ไม่เปลี่ยนรูปใน Scala (ดูโค้ดตัวอย่างที่สร้างไว้ด้านล่าง) คุณสามารถใช้ ListBuffer ที่ไม่เปลี่ยนแปลงสร้างvar
รายการและแก้ไขได้ใช้วิธีการเรียกซ้ำหางและอาจเป็นวิธีอื่นที่ฉันไม่รู้
โดยสัญชาตญาณฉันใช้ ListBuffer แต่ฉันไม่มีเหตุผลที่ดีในการทำเช่นนั้น มีวิธีการที่ต้องการหรือเป็นสำนวนในการสร้างรายการหรือมีสถานการณ์ที่ดีที่สุดสำหรับวิธีการหนึ่งมากกว่าอีกวิธีหนึ่งหรือไม่?
import scala.collection.mutable.ListBuffer
// THESE are all the same as: 0 to 3 toList.
def listTestA() ={
var list:List[Int] = Nil
for(i <- 0 to 3)
list = list ::: List(i)
list
}
def listTestB() ={
val list = new ListBuffer[Int]()
for (i <- 0 to 3)
list += i
list.toList
}
def listTestC() ={
def _add(l:List[Int], i:Int):List[Int] = i match {
case 3 => l ::: List(3)
case _ => _add(l ::: List(i), i +1)
}
_add(Nil, 0)
}
What you DON'T do is use a List and append to it
นั่นเป็นเพราะมีการสร้างรายการใหม่หรือไม่? ในขณะที่การใช้การดำเนินการเพิ่มจะไม่สร้างรายการใหม่?