Yolu Scala bir liste oluşturmak için tercih edilen
Scala (yapmacık örnekte, kodu) değişmez bir liste oluşturmak için çeşitli yollar vardır. Değiştirilebilir bir ListBuffer kullanmak, var
bir listesini oluşturmak ve değiştirebilirsiniz, tail recursive bir yöntemi kullanmak, ve muhtemelen benim bilmediğim Diğerleri.
İçgüdüsel olarak, ListBuffer kullanıyorum, ama bunu yapmak için iyi bir nedenim yok. Bir liste, ya da daha iyi bir yöntem olduğu durumlar vardır başka bir yere oluşturmak için tercih edilen ya da deyimsel bir yöntem var mı?
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)
}
CEVAP
ListBuffer
sürekli-zaman ekleme ve List
sabit-zaman dönüşümü olan değişken bir liste.
List
değişmez ve sürekli önüne ve lineer zamanı ekleyin.
Nasıl liste için list ve sipariş elemanları oluşturmak için algoritma bağlıdır oluşturun.
Eğer kullanılacaksa zaman ters sırayla elementleri örneğin, eğer, o zaman sadece List
kullanım ve başa yapabilirsiniz. Olsun o kadar kuyruk özyinelemeli bir işlev olacak, foldLeft
veya başka bir şey pek alakalı değil.
Eğer bunları kullanmak aynı sırada unsurları alırsanız, o zaman bir ListBuffer
Eğer performans önemli ise büyük olasılıkla tercih edilen bir seçimdir.
Ama, eğer sen değil bir kritik yol ve giriş yeterince düşük, her zaman reverse
liste daha sonra, ya da sadece foldRight
reverse
giriş, doğrusal-zaman.
Sana neYOKList
kullanın ve Ekle. Bu sadece bir ön yerleştirmeyi ve sonunda tersine çok daha kötü bir performans verir.
Ruby on Rails web uygulama grafik oluş...
Yapı ve Bunun projeleri oluşturmak içi...
PHP diziler depolamak için tercih edil...
Tek örnek bir uygulama oluşturmak için...
Otomatik oluşturmak SQL Server tablo i...