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)