Scala Koleksiyonları - Liste

Scala Listeleri dizilere oldukça benzer, yani bir listedeki tüm elemanlar aynı türe sahiptir, ancak iki önemli fark vardır. Birincisi, listeler değişmezdir, yani bir listenin öğeleri atama ile değiştirilemez. İkinci olarak, listeler bağlantılı bir listeyi temsil ederken diziler düzdür.

T tipi elemanlara sahip bir listenin tipi şu şekilde yazılır: List[T].

Aşağıdaki örneği deneyin, burada çeşitli veri türleri için tanımlanmış birkaç liste bulunmaktadır.

// List of Strings
val fruit: List[String] = List("apples", "oranges", "pears")
// List of Integers
val nums: List[Int] = List(1, 2, 3, 4)
// Empty List.
val empty: List[Nothing] = List()
// Two dimensional list
val dim: List[List[Int]] = List(
   List(1, 0, 0),
   List(0, 1, 0),
   List(0, 0, 1)
)

Tüm listeler iki temel yapı taşı kullanılarak tanımlanabilir, bir kuyruk Nil ve ::, telaffuz edilen cons. Nil ayrıca boş listeyi temsil eder. Yukarıdaki tüm listeler aşağıdaki gibi tanımlanabilir.

// List of Strings
val fruit = "apples" :: ("oranges" :: ("pears" :: Nil))
// List of Integers
val nums = 1 :: (2 :: (3 :: (4 :: Nil)))
// Empty List.
val empty = Nil
// Two dimensional list
val dim = (1 :: (0 :: (0 :: Nil))) ::
   (0 :: (1 :: (0 :: Nil))) ::
   (0 :: (0 :: (1 :: Nil))) :: Nil

Listelerdeki Temel İşlemler

Listelerdeki tüm işlemler aşağıdaki üç yöntemle ifade edilebilir.

Sr.No Yöntemler ve Açıklama
1

head

Bu yöntem, bir listenin ilk öğesini döndürür.

2

tail

Bu yöntem, ilki dışındaki tüm öğelerden oluşan bir liste döndürür.

3

isEmpty

Liste boşsa bu yöntem true, aksi takdirde false döndürür.

Aşağıdaki örnek, yukarıdaki yöntemlerin nasıl kullanılacağını gösterir.

Misal

object Demo {
   def main(args: Array[String]) {
      val fruit = "apples" :: ("oranges" :: ("pears" :: Nil))
      val nums = Nil
      println( "Head of fruit : " + fruit.head )
      println( "Tail of fruit : " + fruit.tail )
      println( "Check if fruit is empty : " + fruit.isEmpty )
      println( "Check if nums is empty : " + nums.isEmpty )
   }
}

Yukarıdaki programı şuraya kaydedin: Demo.scala. Bu programı derlemek ve çalıştırmak için aşağıdaki komutlar kullanılır.

Komut

\>scalac Demo.scala
\>scala Demo

Çıktı

Head of fruit : apples
Tail of fruit : List(oranges, pears)
Check if fruit is empty : false
Check if nums is empty : true

Listeleri Birleştirme

İkisini de kullanabilirsiniz ::: operatör veya List.:::() yöntem veya List.concat()iki veya daha fazla liste eklemek için yöntem. Lütfen aşağıda verilen aşağıdaki örneği bulun -

Misal

object Demo {
   def main(args: Array[String]) {
      val fruit1 = "apples" :: ("oranges" :: ("pears" :: Nil))
      val fruit2 = "mangoes" :: ("banana" :: Nil)
      // use two or more lists with ::: operator
      var fruit = fruit1 ::: fruit2
      println( "fruit1 ::: fruit2 : " + fruit )
      // use two lists with Set.:::() method
      fruit = fruit1.:::(fruit2)
      println( "fruit1.:::(fruit2) : " + fruit )
      // pass two or more lists as arguments
      fruit = List.concat(fruit1, fruit2)
      println( "List.concat(fruit1, fruit2) : " + fruit  )
   }
}

Yukarıdaki programı şuraya kaydedin: Demo.scala. Bu programı derlemek ve çalıştırmak için aşağıdaki komutlar kullanılır.

Komut

\>scalac Demo.scala
\>scala Demo

Çıktı

fruit1 ::: fruit2 : List(apples, oranges, pears, mangoes, banana)
fruit1.:::(fruit2) : List(mangoes, banana, apples, oranges, pears)
List.concat(fruit1, fruit2) : List(apples, oranges, pears, mangoes, banana)

Üniforma Listeleri Oluşturma

Kullanabilirsiniz List.fill()yöntem aynı elemanın sıfır veya daha fazla kopyasından oluşan bir liste oluşturur. Aşağıdaki örnek programı deneyin.

Misal

object Demo {
   def main(args: Array[String]) {
      val fruit = List.fill(3)("apples") // Repeats apples three times.
      println( "fruit : " + fruit  )
      val num = List.fill(10)(2)         // Repeats 2, 10 times.
      println( "num : " + num  )
   }
}

Yukarıdaki programı şuraya kaydedin: Demo.scala. Bu programı derlemek ve çalıştırmak için aşağıdaki komutlar kullanılır.

Komut

\>scalac Demo.scala
\>scala Demo

Çıktı

fruit : List(apples, apples, apples)
num : List(2, 2, 2, 2, 2, 2, 2, 2, 2, 2)

Bir Fonksiyonu Tablo Oluşturma

İle birlikte bir işlevi kullanabilirsiniz List.tabulate()Listeyi tablo haline getirmeden önce listenin tüm öğelerine uygulama yöntemi. Argümanları List.fill'inkiler gibidir: ilk argüman listesi oluşturulacak listenin boyutlarını verir ve ikincisi listenin öğelerini açıklar. Tek fark, sabitlenen elemanlar yerine bir fonksiyondan hesaplanmalarıdır.

Aşağıdaki örnek programı deneyin.

Misal

object Demo {
   def main(args: Array[String]) {
      // Creates 5 elements using the given function.
      val squares = List.tabulate(6)(n => n * n)
      println( "squares : " + squares  )
      val mul = List.tabulate( 4,5 )( _ * _ )      
      println( "mul : " + mul  )
   }
}

Yukarıdaki programı şuraya kaydedin: Demo.scala. Bu programı derlemek ve çalıştırmak için aşağıdaki komutlar kullanılır.

Komut

\>scalac Demo.scala
\>scala Demo

Çıktı

squares : List(0, 1, 4, 9, 16, 25)
mul : List(List(0, 0, 0, 0, 0), List(0, 1, 2, 3, 4), 
   List(0, 2, 4, 6, 8), List(0, 3, 6, 9, 12))

Ters Liste Sırası

Kullanabilirsiniz List.reverselistenin tüm öğelerini tersine çevirme yöntemi. Aşağıdaki örnek, kullanımı göstermektedir.

Misal

object Demo {
   def main(args: Array[String]) {
      val fruit = "apples" :: ("oranges" :: ("pears" :: Nil))
      println( "Before reverse fruit : " + fruit )
      println( "After reverse fruit : " + fruit.reverse )
   }
}

Yukarıdaki programı şuraya kaydedin: Demo.scala. Bu programı derlemek ve çalıştırmak için aşağıdaki komutlar kullanılır.

Komut

\>scalac Demo.scala
\>scala Demo

Çıktı

Before reverse fruit : List(apples, oranges, pears)
After reverse fruit : List(pears, oranges, apples)