SORU
6 AĞUSTOS 2009, PERŞEMBE


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
6 AĞUSTOS 2009, PERŞEMBE


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • RyanXLT

    RyanXLT

    22 Ocak 2011
  • theavettbrothers

    theavettbrot

    9 ŞUBAT 2007
  • TheFlightsuit

    TheFlightsui

    22 HAZİRAN 2009