Koleksi Scala - Daftar

Daftar Scala sangat mirip dengan array yang artinya, semua elemen daftar memiliki tipe yang sama tetapi ada dua perbedaan penting. Pertama, daftar tidak dapat diubah, yang berarti elemen daftar tidak dapat diubah oleh tugas. Kedua, daftar mewakili daftar tertaut sedangkan array datar.

Jenis daftar yang memiliki elemen tipe T ditulis sebagai List[T].

Coba contoh berikut, berikut adalah beberapa daftar yang ditentukan untuk berbagai tipe data.

// 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)
)

Semua daftar dapat ditentukan dengan menggunakan dua blok bangunan dasar, satu ekor Nil dan ::, yang diucapkan cons. Nihil juga mewakili daftar kosong. Semua daftar di atas dapat didefinisikan sebagai berikut.

// 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

Operasi Dasar pada Daftar

Semua operasi pada daftar dapat diekspresikan dalam tiga metode berikut.

Sr Tidak Metode & Deskripsi
1

head

Metode ini mengembalikan elemen pertama dari daftar.

2

tail

Metode ini mengembalikan daftar yang terdiri dari semua elemen kecuali yang pertama.

3

isEmpty

Metode ini mengembalikan nilai true jika daftar kosong jika tidak salah.

Contoh berikut menunjukkan cara menggunakan metode di atas.

Contoh

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 )
   }
}

Simpan program di atas dalam Demo.scala. Perintah berikut digunakan untuk mengkompilasi dan menjalankan program ini.

Perintah

\>scalac Demo.scala
\>scala Demo

Keluaran

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

Daftar Gabungan

Anda bisa menggunakan keduanya ::: operator atau List.:::() metode atau List.concat()metode untuk menambahkan dua atau lebih daftar. Silakan temukan contoh berikut yang diberikan di bawah ini -

Contoh

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  )
   }
}

Simpan program di atas dalam Demo.scala. Perintah berikut digunakan untuk mengkompilasi dan menjalankan program ini.

Perintah

\>scalac Demo.scala
\>scala Demo

Keluaran

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)

Membuat Daftar Seragam

Kamu dapat memakai List.fill()metode membuat daftar yang terdiri dari nol atau lebih salinan dari elemen yang sama. Coba program contoh berikut.

Contoh

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  )
   }
}

Simpan program di atas dalam Demo.scala. Perintah berikut digunakan untuk mengkompilasi dan menjalankan program ini.

Perintah

\>scalac Demo.scala
\>scala Demo

Keluaran

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

Menabulasi Fungsi

Anda dapat menggunakan fungsi bersama dengan List.tabulate()metode untuk diterapkan pada semua elemen daftar sebelum membuat daftar tabulasi. Argumennya sama seperti List.fill: daftar argumen pertama memberikan dimensi daftar yang akan dibuat, dan yang kedua mendeskripsikan elemen daftar. Satu-satunya perbedaan adalah bahwa alih-alih elemen diperbaiki, mereka dihitung dari suatu fungsi.

Coba program contoh berikut.

Contoh

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  )
   }
}

Simpan program di atas dalam Demo.scala. Perintah berikut digunakan untuk mengkompilasi dan menjalankan program ini.

Perintah

\>scalac Demo.scala
\>scala Demo

Keluaran

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))

Urutan Daftar Terbalik

Kamu dapat memakai List.reversemetode untuk membalikkan semua elemen daftar. Contoh berikut menunjukkan penggunaan.

Contoh

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

Simpan program di atas dalam Demo.scala. Perintah berikut digunakan untuk mengkompilasi dan menjalankan program ini.

Perintah

\>scalac Demo.scala
\>scala Demo

Keluaran

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