Bộ sưu tập Scala - Hướng dẫn nhanh
Scala có một bộ thư viện sưu tập phong phú. Bộ sưu tập là vật chứa đựng nhiều thứ. Các vùng chứa đó có thể được sắp xếp theo trình tự, tập hợp tuyến tính của các mục như Danh sách, Tuple, Tùy chọn, Bản đồ, v.v. Các bộ sưu tập có thể có số phần tử tùy ý hoặc bị giới hạn bởi 0 hoặc một phần tử (ví dụ: Tùy chọn).
Bộ sưu tập có thể là strict hoặc là lazy. Bộ sưu tập lười biếng có các phần tử có thể không sử dụng bộ nhớ cho đến khi chúng được truy cập, nhưRanges. Ngoài ra, các bộ sưu tập có thểmutable (nội dung của tài liệu tham khảo có thể thay đổi) hoặc immutable(thứ mà một tham chiếu đề cập đến không bao giờ thay đổi). Lưu ý rằng các bộ sưu tập bất biến có thể chứa các mục có thể thay đổi.
Đối với một số vấn đề, tập hợp có thể thay đổi hoạt động tốt hơn và đối với những vấn đề khác, tập hợp bất biến hoạt động tốt hơn. Khi nghi ngờ, tốt hơn là nên bắt đầu với một bộ sưu tập bất biến và thay đổi nó sau nếu bạn cần những cái có thể thay đổi.
Chương này đưa ra ánh sáng về các loại tập hợp được sử dụng phổ biến nhất và các thao tác được sử dụng thường xuyên nhất đối với các tập hợp đó.
Sr.No | Bộ sưu tập có Mô tả |
---|---|
1 | Scala Lists Danh sách Scala [T] là danh sách liên kết kiểu T. |
2 | Scala Sets Tập hợp là tập hợp các phần tử khác nhau theo từng cặp của cùng một loại. |
3 | Scala Maps Bản đồ là một tập hợp các cặp khóa / giá trị. Bất kỳ giá trị nào cũng có thể được truy xuất dựa trên khóa của nó. |
4 | Scala Tuples Không giống như một mảng hoặc danh sách, một bộ tuple có thể chứa các đối tượng với nhiều kiểu khác nhau. |
5 | Scala Options Tùy chọn [T] cung cấp một vùng chứa cho không hoặc một phần tử của một kiểu nhất định. |
6 | Scala Iterators Trình lặp không phải là một tập hợp, mà là một cách để truy cập từng phần tử của một tập hợp. |
Scala có thể được cài đặt trên bất kỳ hệ thống Windows hoặc UNIX nào. Trước khi bắt đầu cài đặt Scala trên máy tính của mình, bạn phải cài đặt Java 1.8 trở lên trên máy tính của mình.
Làm theo các bước dưới đây để cài đặt Scala.
Bước 1: Xác minh cài đặt Java của bạn
Trước hết, bạn cần cài đặt Bộ phát triển phần mềm Java (SDK) trên hệ thống của mình. Để xác minh điều này, hãy thực hiện bất kỳ lệnh nào trong hai lệnh sau tùy thuộc vào nền tảng bạn đang làm việc.
Nếu cài đặt Java đã được thực hiện đúng cách, thì nó sẽ hiển thị phiên bản hiện tại và đặc điểm kỹ thuật của cài đặt Java của bạn. Đầu ra mẫu được đưa ra trong bảng sau.
Nền tảng | Chỉ huy | Đầu ra mẫu |
---|---|---|
các cửa sổ | Mở Command Console và nhập - \>java -version |
Phiên bản Java "1.8.0_31" Thời gian chạy Java (TM) SE Môi trường (bản dựng 1.8.0_31-b31) Máy chủ 64-bit Java Hotspot (TM) VM (bản dựng 25.31-b07, chế độ hỗn hợp) |
Linux | Mở Command terminal và nhập - $java -version |
Phiên bản Java "1.8.0_31" Mở Môi trường thời gian chạy JDK (rhel-2.8.10.4.el6_4-x86_64) Mở JDK 64-Bit Server VM (bản dựng 25.31-b07, chế độ hỗn hợp) |
Chúng tôi giả định rằng những người đọc hướng dẫn này đã cài đặt Java SDK phiên bản 1.8.0_31 trên hệ thống của họ.
Trong trường hợp bạn không có Java SDK, hãy tải xuống phiên bản hiện tại của nó từ https://www.oracle.com/technetwork/java/javase/downloads/index.html và cài đặt nó.
Bước 2: Đặt môi trường Java của bạn
Đặt biến môi trường JAVA_HOME trỏ đến vị trí thư mục cơ sở nơi Java được cài đặt trên máy của bạn. Ví dụ,
Sr.No | Nền tảng & Mô tả |
---|---|
1 | Windows Đặt JAVA_HOME thành C: \ ProgramFiles \ java \ jdk1.8.0_31 |
2 | Linux Xuất JAVA_HOME = / usr / local / java-current |
Nối đường dẫn đầy đủ của vị trí trình biên dịch Java vào Đường dẫn hệ thống.
Sr.No | Nền tảng & Mô tả |
---|---|
1 | Windows Nối chuỗi "C: \ Program Files \ Java \ jdk1.8.0_31 \ bin" vào cuối biến hệ thống PATH. |
2 | Linux Xuất PATH = $ PATH: $ JAVA_HOME / bin / |
Thực hiện lệnh java -version từ dấu nhắc lệnh như đã giải thích ở trên.
Bước 3: Cài đặt Scala
Bạn có thể tải xuống Scala từ www.scala-lang.org/downloads . Tại thời điểm viết hướng dẫn này, tôi đã tải xuống 'scala-2.13.1-installer.jar'. Đảm bảo rằng bạn có đặc quyền quản trị để tiếp tục. Bây giờ, hãy thực hiện lệnh sau tại dấu nhắc lệnh:
Nền tảng | Lệnh & Đầu ra | Sự miêu tả |
---|---|---|
các cửa sổ | \> java -jar scala-2.13.1-installer.jar \> |
Lệnh này sẽ hiển thị một trình hướng dẫn cài đặt, hướng dẫn bạn cài đặt Scala trên máy windows của mình. Trong quá trình cài đặt, nó sẽ yêu cầu thỏa thuận cấp phép, chỉ cần chấp nhận nó và hơn nữa nó sẽ hỏi một đường dẫn nơi Scala sẽ được cài đặt. Tôi đã chọn đường dẫn mặc định "C: \ Program Files \ Scala", bạn có thể chọn một đường dẫn phù hợp tùy theo sự thuận tiện của mình. |
Linux | Command - $ java -jar scala-2.13.1-installer.jar Output - Chào mừng bạn đến với cài đặt Scala 2.13.1! Trang chủ tại - http://Scala-lang.org/ nhấn 1 để tiếp tục, 2 để thoát, 3 để hiển thị lại 1 ... [Đang bắt đầu giải nén] [Gói xử lý: Cài đặt gói phần mềm (1/1)] [Đã giải nén xong] [Đã cài đặt xong bảng điều khiển] |
Trong quá trình cài đặt, nó sẽ yêu cầu thỏa thuận cấp phép, chấp nhận nó là loại 1 và nó sẽ hỏi một đường dẫn nơi Scala sẽ được cài đặt. Tôi đã nhập / usr / local / share, bạn có thể chọn một con đường phù hợp tùy theo sự thuận tiện của bạn. |
Cuối cùng, mở một dấu nhắc lệnh mới và nhập Scala -versionvà nhấn Enter. Bạn sẽ thấy những điều sau:
Nền tảng | Chỉ huy | Đầu ra |
---|---|---|
các cửa sổ | \> chuyển đổi tỉ lệ |
Phiên bản chạy mã Scala 2.13.1 - Bản quyền 2002-2019, LAMP / EPFL và Lightbend, Inc. |
Linux | $ scala -version |
Phiên bản chạy mã Scala 2.13.1 - Bản quyền 2002-2019, LAMP / EPFL và Lightbend, Inc.tut |
Scala cung cấp một cấu trúc dữ liệu, array, nơi lưu trữ một tập hợp tuần tự có kích thước cố định của các phần tử cùng loại. Mảng được sử dụng để lưu trữ một tập hợp dữ liệu, nhưng thường hữu ích hơn nếu coi một mảng là một tập hợp các biến cùng kiểu.
Thay vì khai báo các biến riêng lẻ, chẳng hạn như number0, number1, ... và number99, bạn khai báo một biến mảng chẳng hạn như số và sử dụng số [0], số [1] và ..., số [99] để biểu diễn các biến riêng lẻ. Hướng dẫn này giới thiệu cách khai báo biến mảng, tạo mảng và xử lý mảng bằng cách sử dụng các biến được lập chỉ mục. Chỉ số của phần tử đầu tiên của mảng là số 0 và chỉ số của phần tử cuối cùng là tổng số phần tử trừ đi một.
Khai báo biến mảng
Để sử dụng mảng trong chương trình, bạn phải khai báo một biến để tham chiếu đến mảng và bạn phải chỉ định kiểu mảng mà biến có thể tham chiếu.
Sau đây là cú pháp khai báo một biến mảng.
Cú pháp
var z:Array[String] = new Array[String](3)
or
var z = new Array[String](3)
Ở đây, z được khai báo là một mảng các Chuỗi có thể chứa tối đa ba phần tử. Giá trị có thể được gán cho các phần tử riêng lẻ hoặc có quyền truy cập vào các phần tử riêng lẻ, nó có thể được thực hiện bằng cách sử dụng các lệnh như sau:
Chỉ huy
z(0) = "Zara"; z(1) = "Nuha"; z(4/2) = "Ayan"
Ở đây, ví dụ cuối cùng cho thấy rằng nói chung chỉ mục có thể là bất kỳ biểu thức nào mang lại một số nguyên. Có một cách khác để xác định một mảng -
var z = Array("Zara", "Nuha", "Ayan")
Hình ảnh sau đại diện cho một mảng myList. Đây,myList giữ mười giá trị kép và các chỉ số từ 0 đến 9.
Mảng xử lý
Khi xử lý các phần tử của mảng, chúng ta thường sử dụng cấu trúc lặp liên tục vì tất cả các phần tử trong một mảng đều có cùng kiểu và kích thước của mảng đã biết.
Dưới đây là một chương trình ví dụ về cách tạo, khởi tạo và xử lý mảng -
Thí dụ
object Demo {
def main(args: Array[String]) {
var myList = Array(1.9, 2.9, 3.4, 3.5)
// Print all the array elements
for ( x <- myList ) {
println( x )
}
// Summing all elements
var total = 0.0;
for ( i <- 0 to (myList.length - 1)) {
total += myList(i);
}
println("Total is " + total);
// Finding the largest element
var max = myList(0);
for ( i <- 1 to (myList.length - 1) ) {
if (myList(i) > max) max = myList(i);
}
println("Max is " + max);
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
1.9
2.9
3.4
3.5
Total is 11.7
Max is 3.5
Scala không hỗ trợ trực tiếp các hoạt động mảng khác nhau và cung cấp các phương pháp khác nhau để xử lý mảng theo bất kỳ chiều nào. Nếu bạn muốn sử dụng các phương pháp khác nhau thì bắt buộc phải nhậpArray._ gói hàng.
Có nhiều tình huống mà bạn cần phải xác định và sử dụng mảng nhiều chiều (tức là mảng có các phần tử là mảng). Ví dụ, ma trận và bảng là những ví dụ về cấu trúc có thể được thực hiện dưới dạng mảng hai chiều.
Sau đây là ví dụ về định nghĩa mảng hai chiều:
var myMatrix = ofDim[Int](3,3)
Đây là một mảng có ba phần tử, mỗi phần tử là một mảng các số nguyên có ba phần tử.
Hãy thử chương trình ví dụ sau để xử lý một mảng nhiều chiều:
Thí dụ
import Array._
object Demo {
def main(args: Array[String]) {
var myMatrix = ofDim[Int](3,3)
// build a matrix
for (i <- 0 to 2) {
for ( j <- 0 to 2) {
myMatrix(i)(j) = j;
}
}
// Print two dimensional array
for (i <- 0 to 2) {
for ( j <- 0 to 2) {
print(" " + myMatrix(i)(j));
}
println();
}
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
0 1 2
0 1 2
0 1 2
Sử dụng phương thức range () để tạo một mảng chứa một chuỗi các số nguyên tăng dần trong một phạm vi nhất định. Bạn có thể sử dụng đối số cuối cùng làm bước để tạo chuỗi; nếu bạn không sử dụng đối số cuối cùng, thì bước sẽ được giả định là 1.
Chúng ta hãy lấy một ví dụ về việc tạo một mảng trong phạm vi (10, 20, 2): Có nghĩa là tạo một mảng có các phần tử từ 10 đến 20 và chênh lệch phạm vi 2. Các phần tử trong mảng là 10, 12, 14, 16 và 18 .
Một ví dụ khác: range (10, 20). Ở đây sự khác biệt về phạm vi không được cung cấp nên theo mặc định, nó giả định là 1 phần tử. Nó tạo ra một mảng với các phần tử nằm trong khoảng từ 10 đến 20 với chênh lệch phạm vi 1. Các phần tử trong mảng là 10, 11, 12, 13, ... và 19.
Chương trình ví dụ sau đây cho thấy cách tạo một mảng với các phạm vi.
Thí dụ
import Array._
object Demo {
def main(args: Array[String]) {
var myList1 = range(10, 20, 2)
var myList2 = range(10,20)
// Print all the array elements
for ( x <- myList1 ) {
print( " " + x )
}
println()
for ( x <- myList2 ) {
print( " " + x )
}
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
10 12 14 16 18
10 11 12 13 14 15 16 17 18 19
Scala cung cấp một cấu trúc dữ liệu, ArrayBuffer, có thể thay đổi kích thước khi kích thước ban đầu giảm. Vì mảng có kích thước cố định và không thể chiếm nhiều phần tử hơn trong một mảng, ArrayBuffer là một giải pháp thay thế cho mảng có kích thước linh hoạt.
Bên trong ArrayBuffer duy trì một mảng có kích thước hiện tại để lưu trữ các phần tử. Khi một phần tử mới được thêm vào, kích thước sẽ được kiểm tra. Trong trường hợp mảng bên dưới đã đầy thì một mảng mới lớn hơn sẽ được tạo và tất cả các phần tử được sao chép sang mảng lớn hơn.
Khai báo các biến ArrayBuffer
Sau đây là cú pháp để khai báo một biến ArrayBuffer.
Cú pháp
var z = ArrayBuffer[String]()
Ở đây, z được khai báo như một bộ đệm mảng của các Chuỗi mà ban đầu là trống. Các giá trị có thể được thêm vào bằng cách sử dụng các lệnh như sau:
Chỉ huy
z += "Zara";
z += "Nuha";
z += "Ayan";
Xử lý ArrayBuffer
Dưới đây là một chương trình ví dụ về cách tạo, khởi tạo và xử lý ArrayBuffer -
Thí dụ
import scala.collection.mutable.ArrayBuffer
object Demo {
def main(args: Array[String]) = {
var myList = ArrayBuffer("Zara","Nuha","Ayan")
println(myList);
// Add an element
myList += "Welcome";
// Add two element
myList += ("To", "Tutorialspoint");
println(myList);
// Remove an element
myList -= "Welcome";
// print second element
println(myList(1));
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
ArrayBuffer(Zara, Nuha, Ayan)
ArrayBuffer(Zara, Nuha, Ayan, Welcome, To, Tutorialspoint)
Nuha
Scala Lists khá giống với mảng có nghĩa là, tất cả các phần tử của danh sách có cùng kiểu nhưng có hai điểm khác biệt quan trọng. Đầu tiên, danh sách là bất biến, có nghĩa là các phần tử của danh sách không thể thay đổi bằng cách gán. Thứ hai, danh sách đại diện cho một danh sách được liên kết trong khi các mảng là phẳng.
Loại danh sách có các phần tử thuộc loại T được viết là List[T].
Hãy thử ví dụ sau, đây là một vài danh sách được xác định cho các kiểu dữ liệu khác nhau.
// 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ất cả các danh sách có thể được xác định bằng hai khối xây dựng cơ bản, một phần đuôi Nil và ::, được phát âm cons. Nil cũng đại diện cho danh sách trống. Tất cả các danh sách trên có thể được định nghĩa như sau.
// 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
Các thao tác cơ bản trên danh sách
Tất cả các hoạt động trên danh sách có thể được thể hiện theo ba phương pháp sau.
Sr.No | Phương pháp & Mô tả |
---|---|
1 | head Phương thức này trả về phần tử đầu tiên của danh sách. |
2 | tail Phương thức này trả về một danh sách bao gồm tất cả các phần tử ngoại trừ phần tử đầu tiên. |
3 | isEmpty Phương thức này trả về true nếu danh sách trống, ngược lại là false. |
Ví dụ sau đây cho thấy cách sử dụng các phương pháp trên.
Thí dụ
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 )
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
Head of fruit : apples
Tail of fruit : List(oranges, pears)
Check if fruit is empty : false
Check if nums is empty : true
Nối danh sách
Bạn có thể sử dụng ::: nhà điều hành hoặc List.:::() phương pháp hoặc List.concat()để thêm hai hoặc nhiều danh sách. Vui lòng tìm ví dụ sau được đưa ra dưới đây:
Thí dụ
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 )
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
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)
Tạo danh sách thống nhất
Bạn có thể dùng List.fill()phương thức tạo một danh sách bao gồm không hoặc nhiều bản sao của cùng một phần tử. Hãy thử chương trình ví dụ sau.
Thí dụ
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 )
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
fruit : List(apples, apples, apples)
num : List(2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
Lập bảng một hàm
Bạn có thể sử dụng một hàm cùng với List.tabulate()để áp dụng cho tất cả các phần tử của danh sách trước khi lập bảng danh sách. Các đối số của nó cũng giống như đối số List.fill: danh sách đối số đầu tiên cung cấp các kích thước của danh sách để tạo và đối số thứ hai mô tả các phần tử của danh sách. Sự khác biệt duy nhất là thay vì các phần tử được cố định, chúng được tính toán từ một hàm.
Hãy thử chương trình ví dụ sau.
Thí dụ
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 )
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
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))
Đảo ngược thứ tự danh sách
Bạn có thể dùng List.reversephương pháp đảo ngược tất cả các phần tử của danh sách. Ví dụ sau đây cho thấy cách sử dụng.
Thí dụ
object Demo {
def main(args: Array[String]) {
val fruit = "apples" :: ("oranges" :: ("pears" :: Nil))
println( "Before reverse fruit : " + fruit )
println( "After reverse fruit : " + fruit.reverse )
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
Before reverse fruit : List(apples, oranges, pears)
After reverse fruit : List(pears, oranges, apples)
Scala cung cấp một cấu trúc dữ liệu, ListBuffer, hiệu quả hơn List khi thêm / bớt các phần tử trong danh sách. Nó cung cấp các phương thức để thêm trước, nối các phần tử vào một danh sách.
Khai báo các biến ListBuffer
Sau đây là cú pháp để khai báo một biến ListBuffer.
Cú pháp
var z = ListBuffer[String]()
Ở đây, z được khai báo như một danh sách đệm của các Chuỗi mà ban đầu là trống. Các giá trị có thể được thêm vào bằng cách sử dụng các lệnh như sau:
Chỉ huy
z += "Zara";
z += "Nuha";
z += "Ayan";
Xử lý danh sáchBuffer
Dưới đây là một chương trình ví dụ về cách tạo, khởi tạo và xử lý ListBuffer -
Thí dụ
import scala.collection.mutable.ListBuffer
object Demo {
def main(args: Array[String]) = {
var myList = ListBuffer("Zara","Nuha","Ayan")
println(myList);
// Add an element
myList += "Welcome";
// Add two element
myList += ("To", "Tutorialspoint");
println(myList);
// Remove an element
myList -= "Welcome";
// print second element
println(myList(1));
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
ListBuffer(Zara, Nuha, Ayan)
ListBuffer(Zara, Nuha, Ayan, Welcome, To, Tutorialspoint)
Nuha
Scala Set là một tập hợp các phần tử khác nhau theo từng cặp của cùng một loại. Nói cách khác, một Tập hợp là một tập hợp không chứa các phần tử trùng lặp. ListSet triển khai các tập hợp bất biến và sử dụng cấu trúc danh sách. Thứ tự chèn các phần tử được giữ nguyên trong khi lưu trữ các phần tử.
Khai báo các biến ListSet
Sau đây là cú pháp để khai báo một biến ListSet.
Cú pháp
var z : ListSet[String] = ListSet("Zara","Nuha","Ayan")
Ở đây, z được khai báo là một tập hợp các chuỗi có ba thành viên. Các giá trị có thể được thêm vào bằng cách sử dụng các lệnh như sau:
Chỉ huy
var myList1: ListSet[String] = myList + "Naira";
Bộ danh sách xử lý
Dưới đây là một chương trình ví dụ về cách tạo, khởi tạo và xử lý ListSet -
Thí dụ
import scala.collection.immutable.ListSet
object Demo {
def main(args: Array[String]) = {
var myList: ListSet[String] = ListSet("Zara","Nuha","Ayan");
// Add an element
var myList1: ListSet[String] = myList + "Naira";
// Remove an element
var myList2: ListSet[String] = myList - "Nuha";
// Create empty set
var myList3: ListSet[String] = ListSet.empty[String];
println(myList);
println(myList1);
println(myList2);
println(myList3);
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
ListSet(Zara, Nuha, Ayan)
ListSet(Zara, Nuha, Ayan, Naira)
ListSet(Zara, Ayan)
ListSet()
Scala Vector là một cấu trúc dữ liệu bất biến có mục đích chung, nơi các phần tử có thể được truy cập ngẫu nhiên. Nó thường được sử dụng cho các bộ sưu tập dữ liệu lớn.
Khai báo các biến vectơ
Sau đây là cú pháp khai báo một biến Vector.
Cú pháp
var z : Vector[String] = Vector("Zara","Nuha","Ayan")
Ở đây, z được khai báo là một vectơ của chuỗi có ba thành viên. Các giá trị có thể được thêm vào bằng cách sử dụng các lệnh như sau:
Chỉ huy
var vector1: Vector[String] = z + "Naira";
Xử lý vector
Dưới đây là một chương trình ví dụ về cách tạo, khởi tạo và xử lý Vector -
Thí dụ
import scala.collection.immutable.Vector
object Demo {
def main(args: Array[String]) = {
var vector: Vector[String] = Vector("Zara","Nuha","Ayan");
// Add an element
var vector1: Vector[String] = vector :+ "Naira";
// Reverse an element
var vector2: Vector[String] = vector.reverse;
// sort a vector
var vector3: Vector[String] = vector1.sorted;
println(vector);
println(vector1);
println(vector2);
println(vector3);
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
Vector(Zara, Nuha, Ayan)
Vector(Zara, Nuha, Ayan, Naira)
Vector(Ayan, Nuha, Zara)
Vector(Ayan, Naira, Nuha, Zara)
Scala Set là một tập hợp các phần tử khác nhau theo từng cặp của cùng một loại. Nói cách khác, một Tập hợp là một tập hợp không chứa các phần tử trùng lặp. Có hai loại Bộ,immutable và mutable. Sự khác biệt giữa các đối tượng có thể thay đổi và không thể thay đổi là khi một đối tượng là bất biến, thì bản thân đối tượng đó không thể thay đổi được.
Theo mặc định, Scala sử dụng Bộ bất biến. Nếu bạn muốn sử dụng Bộ có thể thay đổi, bạn sẽ phải nhậpscala.collection.mutable.Setlớp một cách rõ ràng. Nếu bạn muốn sử dụng cả tập hợp có thể thay đổi và tập hợp bất biến trong cùng một bộ sưu tập, thì bạn có thể tiếp tục tham khảo Tập hợp bất biến nhưSet nhưng bạn có thể tham khảo Set có thể thay đổi là mutable.Set.
Đây là cách bạn có thể khai báo các Bộ bất biến -
Cú pháp
// Empty set of integer type
var s : Set[Int] = Set()
// Set of integer type
var s : Set[Int] = Set(1,3,5,7)
or
var s = Set(1,3,5,7)
Trong khi xác định một tập hợp trống, chú thích kiểu là cần thiết vì hệ thống cần gán một kiểu cụ thể cho biến.
Các thao tác cơ bản trên phim trường
Tất cả các phép toán trên tập hợp có thể được biểu diễn theo ba phương pháp sau:
Sr.No | Phương pháp & Mô tả |
---|---|
1 | head Phương thức này trả về phần tử đầu tiên của một tập hợp. |
2 | tail Phương thức này trả về một tập hợp bao gồm tất cả các phần tử ngoại trừ phần tử đầu tiên. |
3 | isEmpty Phương thức này trả về true nếu tập hợp trống, ngược lại là false. |
Hãy thử ví dụ sau cho thấy cách sử dụng các phương pháp hoạt động cơ bản:
Thí dụ
object Demo {
def main(args: Array[String]) {
val fruit = Set("apples", "oranges", "pears")
val nums: Set[Int] = Set()
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 )
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
Head of fruit : apples
Tail of fruit : Set(oranges, pears)
Check if fruit is empty : false
Check if nums is empty : true
Bộ ghép nối
Bạn có thể sử dụng ++ nhà điều hành hoặc Set.++() phương thức để nối hai hoặc nhiều tập hợp, nhưng trong khi thêm tập hợp, nó sẽ loại bỏ các phần tử trùng lặp.
Sau đây là ví dụ để nối hai tập hợp.
Thí dụ
object Demo {
def main(args: Array[String]) {
val fruit1 = Set("apples", "oranges", "pears")
val fruit2 = Set("mangoes", "banana")
// use two or more sets with ++ as operator
var fruit = fruit1 ++ fruit2
println( "fruit1 ++ fruit2 : " + fruit )
// use two sets with ++ as method
fruit = fruit1.++(fruit2)
println( "fruit1.++(fruit2) : " + fruit )
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
fruit1 ++ fruit2 : Set(banana, apples, mangoes, pears, oranges)
fruit1.++(fruit2) : Set(banana, apples, mangoes, pears, oranges)
Tìm phần tử tối đa, tối thiểu trong một tập hợp
Bạn có thể dùng Set.min phương pháp để tìm ra mức tối thiểu và Set.maxphương pháp để tìm ra tối đa các phần tử có sẵn trong một tập hợp. Sau đây là ví dụ để hiển thị chương trình.
Thí dụ
object Demo {
def main(args: Array[String]) {
val num = Set(5,6,9,20,30,45)
// find min and max of the elements
println( "Min element in Set(5,6,9,20,30,45) : " + num.min )
println( "Max element in Set(5,6,9,20,30,45) : " + num.max )
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
Min element in Set(5,6,9,20,30,45) : 5
Max element in Set(5,6,9,20,30,45) : 45
Tìm Nội dung Giá trị Chung
Bạn có thể sử dụng Set.& phương pháp hoặc Set.intersectphương pháp tìm giá trị chung giữa hai tập hợp. Hãy thử ví dụ sau để hiển thị cách sử dụng.
Thí dụ
object Demo {
def main(args: Array[String]) {
val num1 = Set(5,6,9,20,30,45)
val num2 = Set(50,60,9,20,35,55)
// find common elements between two sets
println( "num1.&(num2) : " + num1.&(num2) )
println( "num1.intersect(num2) : " + num1.intersect(num2) )
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
num1.&(num2) : Set(20, 9)
num1.intersect(num2) : Set(20, 9)
Bitset là một lớp cơ sở chung cho các bit có thể thay đổi và bất biến. Bitsets là tập hợp các số nguyên không âm và được biểu diễn dưới dạng các mảng bit có kích thước thay đổi được đóng gói thành các từ 64 bit. Dấu chân bộ nhớ của một tập bit được biểu diễn bằng số lớn nhất được lưu trữ trong nó.
Khai báo các biến BitSet
Sau đây là cú pháp để khai báo một biến BitSet.
Cú pháp
var z : BitSet = BitSet(0,1,2)
Ở đây, z được khai báo là một tập bit gồm các số nguyên không âm có ba phần tử. Các giá trị có thể được thêm vào bằng cách sử dụng các lệnh như sau:
Chỉ huy
var myList1: BitSet = myList + 3;
Xử lý BitSet
Dưới đây là một chương trình ví dụ về cách tạo, khởi tạo và xử lý BitSet -
Thí dụ
import scala.collection.immutable.BitSet
object Demo {
def main(args: Array[String]) = {
var mySet: BitSet = BitSet(0, 1, 2);
// Add an element
var mySet1: BitSet = mySet + 3;
// Remove an element
var mySet2: BitSet = mySet - 2;
var mySet3: BitSet = BitSet(4, 5);
// Adding sets
var mySet4: BitSet = mySet1 ++ mySet3;
println(mySet);
println(mySet1);
println(mySet2);
println(mySet4);
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
BitSet(0, 1, 2)
BitSet(0, 1, 2, 3)
BitSet(0, 1)
BitSet(0, 1, 2, 3, 4, 5)
Scala Set là một tập hợp các phần tử khác nhau theo từng cặp của cùng một loại. Nói cách khác, một Tập hợp là một tập hợp không chứa các phần tử trùng lặp. HashSet triển khai các tập hợp bất biến và sử dụng bảng băm. Thứ tự chèn các phần tử không được giữ nguyên.
Khai báo các biến HashSet
Sau đây là cú pháp khai báo một biến HashSet.
Cú pháp
var z : HashSet[String] = HashSet("Zara","Nuha","Ayan")
Ở đây, z được khai báo là một tập hợp băm của chuỗi có ba thành viên. Các giá trị có thể được thêm vào bằng cách sử dụng các lệnh như sau:
Chỉ huy
var myList1: HashSet[String] = myList + "Naira";
Xử lý HashSet
Dưới đây là một chương trình ví dụ về cách tạo, khởi tạo và xử lý HashSet -
Thí dụ
import scala.collection.immutable.HashSet
object Demo {
def main(args: Array[String]) = {
var mySet: HashSet[String] = HashSet("Zara","Nuha","Ayan");
// Add an element
var mySet1: HashSet[String] = mySet + "Naira";
// Remove an element
var mySet2: HashSet[String] = mySet - "Nuha";
// Create empty set
var mySet3: HashSet[String] = HashSet.empty[String];
println(mySet);
println(mySet1);
println(mySet2);
println(mySet3);
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
HashSet(Zara, Nuha, Ayan)
HashSet(Zara, Nuha, Ayan, Naira)
HashSet(Zara, Ayan)
HashSet()
Scala Set là một tập hợp các phần tử khác nhau theo từng cặp của cùng một loại. Nói cách khác, một Tập hợp là một tập hợp không chứa các phần tử trùng lặp. TreeSet triển khai các tập hợp bất biến và giữ các phần tử theo thứ tự được sắp xếp.
Khai báo các biến TreeSet
Sau đây là cú pháp để khai báo một biến TreeSet.
Cú pháp
var z : TreeSet[String] = TreeSet("Zara","Nuha","Ayan")
Ở đây, z được khai báo là một tập hợp các chuỗi có ba thành viên. Các giá trị có thể được thêm vào bằng cách sử dụng các lệnh như sau:
Chỉ huy
var myList1: TreeSet[String] = myList + "Naira";
Cây xử lý
Dưới đây là một chương trình ví dụ về cách tạo, khởi tạo và xử lý TreeSet -
Thí dụ
import scala.collection.immutable.TreeSet
object Demo {
def main(args: Array[String]) = {
var mySet: TreeSet[String] = TreeSet("Zara","Nuha","Ayan");
// Add an element
var mySet1: TreeSet[String] = mySet + "Naira";
// Remove an element
var mySet2: TreeSet[String] = mySet - "Nuha";
// Create empty set
var mySet3: TreeSet[String] = TreeSet.empty[String];
println(mySet);
println(mySet1);
println(mySet2);
println(mySet3);
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
TreeSet(Ayan, Nuha, Zara)
TreeSet(Ayan, Naira, Nuha, Zara)
TreeSet(Ayan, Zara)
TreeSet()
Bản đồ Scala là một tập hợp các cặp khóa / giá trị. Bất kỳ giá trị nào cũng có thể được truy xuất dựa trên khóa của nó. Các khóa là duy nhất trong Bản đồ, nhưng các giá trị không cần phải là duy nhất. Bản đồ còn được gọi là bảng băm. Có hai loại Bản đồ,immutable và mutable. Sự khác biệt giữa các đối tượng có thể thay đổi và không thể thay đổi là khi một đối tượng là bất biến, thì bản thân đối tượng đó không thể thay đổi được.
Theo mặc định, Scala sử dụng Bản đồ bất biến. Nếu bạn muốn sử dụng Bản đồ có thể thay đổi, bạn sẽ phải nhậpscala.collection.mutable.Maplớp một cách rõ ràng. Nếu bạn muốn sử dụng cả Bản đồ có thể thay đổi và Bản đồ bất biến trong cùng một bản đồ, thì bạn có thể tiếp tục tham khảo Bản đồ bất biến nhưMap nhưng bạn có thể tham khảo tập hợp có thể thay đổi là mutable.Map.
Sau đây là các câu lệnh ví dụ để khai báo Bản đồ bất biến -
// Empty hash table whose keys are strings and values are integers:
var A:Map[Char,Int] = Map()
// A map with keys and values.
val colors = Map("red" -> "#FF0000", "azure" -> "#F0FFFF")
Trong khi xác định bản đồ trống, chú thích kiểu là cần thiết vì hệ thống cần gán một kiểu cụ thể cho biến. Nếu chúng ta muốn thêm một cặp khóa-giá trị vào một Bản đồ, chúng ta có thể sử dụng toán tử + như sau.
A + = ('I' -> 1)
A + = ('J' -> 5)
A + = ('K' -> 10)
A + = ('L' -> 100)
Các thao tác cơ bản trên MAP
Tất cả các thao tác trên bản đồ có thể được thể hiện theo ba phương pháp sau.
Sr.No | Phương pháp & Mô tả |
---|---|
1 | keys Phương thức này trả về một có thể lặp lại chứa mỗi khóa trong bản đồ. |
2 | values Phương thức này trả về một giá trị có thể lặp lại chứa mỗi giá trị trong bản đồ. |
3 | isEmpty Phương thức này trả về true nếu bản đồ trống, ngược lại là false. |
Hãy thử chương trình ví dụ sau cho thấy cách sử dụng các phương pháp Bản đồ.
Thí dụ
object Demo {
def main(args: Array[String]) {
val colors = Map(
"red" -> "#FF0000", "azure" -> "#F0FFFF", "peru" -> "#CD853F"
)
val nums: Map[Int, Int] = Map()
println( "Keys in colors : " + colors.keys )
println( "Values in colors : " + colors.values )
println( "Check if colors is empty : " + colors.isEmpty )
println( "Check if nums is empty : " + nums.isEmpty )
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
Keys in colors : Set(red, azure, peru)
Values in colors : MapLike(#FF0000, #F0FFFF, #CD853F)
Check if colors is empty : false
Check if nums is empty : true
Kết hợp các bản đồ
Bạn có thể sử dụng ++ nhà điều hành hoặc Map.++() để ghép hai hoặc nhiều Bản đồ, nhưng trong khi thêm Bản đồ, nó sẽ loại bỏ các khóa trùng lặp.
Hãy thử chương trình ví dụ sau để ghép hai Bản đồ.
Thí dụ
object Demo {
def main(args: Array[String]) {
val colors1 = Map(
"red" -> "#FF0000", "azure" -> "#F0FFFF", "peru" -> "#CD853F"
)
val colors2 = Map(
"blue" -> "#0033FF", "yellow" -> "#FFFF00", "red" -> "#FF0000"
)
// use two or more Maps with ++ as operator
var colors = colors1 ++ colors2
println( "colors1 ++ colors2 : " + colors )
// use two maps with ++ as method
colors = colors1.++(colors2)
println( "colors1.++(colors2)) : " + colors )
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
colors1 ++ colors2 : Map(blue -> #0033FF, azure -> #F0FFFF,
peru -> #CD853F, yellow -> #FFFF00, red -> #FF0000)
colors1.++(colors2)) : Map(blue -> #0033FF, azure -> #F0FFFF,
peru -> #CD853F, yellow -> #FFFF00, red -> #FF0000)
In các khóa và giá trị từ bản đồ
Bạn có thể lặp lại các khóa và giá trị của Bản đồ bằng vòng lặp "foreach". Ở đây, chúng tôi đã sử dụng phương phápforeachđược liên kết với trình vòng lặp để xem qua các phím. Sau đây là chương trình ví dụ.
Thí dụ
object Demo {
def main(args: Array[String]) {
val colors = Map("red" -> "#FF0000", "azure" -> "#F0FFFF","peru" -> "#CD853F")
colors.keys.foreach{
i =>
print( "Key = " + i )
println(" Value = " + colors(i) )
}
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
Key = red Value = #FF0000
Key = azure Value = #F0FFFF
Key = peru Value = #CD853F
Kiểm tra chìa khóa trong Bản đồ
Bạn có thể sử dụng Map.containsphương pháp để kiểm tra xem một khóa nhất định có tồn tại trong bản đồ hay không. Hãy thử chương trình ví dụ sau để kiểm tra khóa.
Thí dụ
object Demo {
def main(args: Array[String]) {
val colors = Map(
"red" -> "#FF0000", "azure" -> "#F0FFFF", "peru" -> "#CD853F"
)
if( colors.contains( "red" )) {
println("Red key exists with value :" + colors("red"))
} else {
println("Red key does not exist")
}
if( colors.contains( "maroon" )) {
println("Maroon key exists with value :" + colors("maroon"))
} else {
println("Maroon key does not exist")
}
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
Red key exists with value :#FF0000
Maroon key does not exist
Bản đồ Scala là một tập hợp các cặp khóa / giá trị. Bất kỳ giá trị nào cũng có thể được truy xuất dựa trên khóa của nó. Các khóa là duy nhất trong Bản đồ, nhưng các giá trị không cần phải là duy nhất. HashMap triển khai bản đồ bất biến và sử dụng bảng băm để triển khai tương tự.
Khai báo các biến HashMap
Sau đây là cú pháp để khai báo một biến HashMap.
Cú pháp
val colors = HashMap("red" -> "#FF0000", "azure" -> "#F0FFFF", "peru" -> "#CD853F")
Ở đây, màu sắc được khai báo như một bản đồ băm của các Chuỗi, Int có ba cặp khóa-giá trị. Các giá trị có thể được thêm vào bằng cách sử dụng các lệnh như sau:
Chỉ huy
var myMap1: HashMap[Char, Int] = colors + ("black" -> "#000000");
Xử lý HashMap
Dưới đây là một chương trình ví dụ về cách tạo, khởi tạo và xử lý HashMap -
Thí dụ
import scala.collection.immutable.HashMap
object Demo {
def main(args: Array[String]) = {
var myMap: HashMap[String,String] = HashMap(
"red" -> "#FF0000", "azure" -> "#F0FFFF", "peru" -> "#CD853F"
);
// Add an element
var myMap1: HashMap[String,String] = myMap + ("white" -> "#FFFFFF");
// Print key values
myMap.keys.foreach{
i =>
print( "Key = " + i )
println(" Value = " + myMap(i) )
}
if( myMap.contains( "red" )) {
println("Red key exists with value :" + myMap("red"))
} else {
println("Red key does not exist")
}
if( myMap.contains( "maroon" )) {
println("Maroon key exists with value :" + myMap("maroon"))
} else {
println("Maroon key does not exist")
}
//removing element
var myMap2: HashMap[String,String] = myMap - ("white");
// Create empty map
var myMap3: HashMap[String,String] = HashMap.empty[String, String];
println(myMap1);
println(myMap2);
println(myMap3);
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
Key = azure Value = #F0FFFF
Key = peru Value = #CD853F
Key = red Value = #FF0000
Red key exists with value :#FF0000
Maroon key does not exist
HashMap(azure -> #F0FFFF, peru -> #CD853F, white -> #FFFFFF, red -> #FF0000)
HashMap(azure -> #F0FFFF, peru -> #CD853F, red -> #FF0000)
HashMap()
Bản đồ Scala là một tập hợp các cặp khóa / giá trị. Bất kỳ giá trị nào cũng có thể được truy xuất dựa trên khóa của nó. Các khóa là duy nhất trong Bản đồ, nhưng các giá trị không cần phải là duy nhất. ListMap thực hiện bản đồ bất biến và sử dụng danh sách để triển khai tương tự. Nó được sử dụng với số lượng phần tử nhỏ.
Khai báo các biến ListMap
Sau đây là cú pháp để khai báo một biến ListMap.
Cú pháp
val colors = ListMap("red" -> "#FF0000", "azure" -> "#F0FFFF", "peru" -> "#CD853F")
Ở đây, màu sắc được khai báo như một bản đồ băm của các Chuỗi, Int có ba cặp khóa-giá trị. Các giá trị có thể được thêm vào bằng cách sử dụng các lệnh như sau:
Chỉ huy
var myMap1: ListMap[Char, Int] = colors + ("black" -> "#000000");
Xử lý ListMap
Dưới đây là một chương trình ví dụ về cách tạo, khởi tạo và xử lý ListMap -
Thí dụ
import scala.collection.immutable.ListMap
object Demo {
def main(args: Array[String]) = {
var myMap: ListMap[String,String] = ListMap(
"red" -> "#FF0000", "azure" -> "#F0FFFF", "peru" -> "#CD853F"
);
// Add an element
var myMap1: ListMap[String,String] = myMap + ("white" -> "#FFFFFF");
// Print key values
myMap.keys.foreach{
i =>
print( "Key = " + i )
println(" Value = " + myMap(i) )
}
if( myMap.contains( "red" )) {
println("Red key exists with value :" + myMap("red"))
} else {
println("Red key does not exist")
}
if( myMap.contains( "maroon" )) {
println("Maroon key exists with value :" + myMap("maroon"))
} else {
println("Maroon key does not exist")
}
//removing element
var myMap2: ListMap[String,String] = myMap - ("white");
// Create empty map
var myMap3: ListMap[String,String] = ListMap.empty[String, String];
println(myMap1);
println(myMap2);
println(myMap3);
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
Key = red Value = #FF0000
Key = azure Value = #F0FFFF
Key = peru Value = #CD853F
Red key exists with value :#FF0000
Maroon key does not exist
ListMap(red -> #FF0000, azure -> #F0FFFF, peru -> #CD853F, white -> #FFFFFF)
ListMap(red -> #FF0000, azure -> #F0FFFF, peru -> #CD853F)
ListMap()
Trình lặp không phải là một tập hợp, mà là một cách để truy cập từng phần tử của một tập hợp. Hai hoạt động cơ bản trên mộtiterator it Chúng tôi next và hasNext. Một cuộc gọi đếnit.next()sẽ trả về phần tử tiếp theo của trình vòng lặp và nâng cao trạng thái của trình vòng lặp. Bạn có thể tìm hiểu xem có nhiều phần tử hơn để trả về bằng cách sử dụngit.hasNext phương pháp.
Cách đơn giản nhất để "bước qua" tất cả các phần tử được trả về bởi một trình lặp là sử dụng vòng lặp while. Chúng ta hãy theo dõi chương trình ví dụ sau.
Thí dụ
object Demo {
def main(args: Array[String]) {
val it = Iterator("a", "number", "of", "words")
while (it.hasNext){
println(it.next())
}
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
a
number
of
words
Tìm phần tử có giá trị tối thiểu & tối đa
Bạn có thể dùng it.min và it.maxphương pháp để tìm ra các phần tử có giá trị nhỏ nhất và lớn nhất từ một trình lặp. Ở đây, chúng tôi đã sử dụngita và itbđể thực hiện hai hoạt động khác nhau vì trình lặp chỉ có thể được duyệt một lần. Sau đây là chương trình ví dụ.
Thí dụ
object Demo {
def main(args: Array[String]) {
val ita = Iterator(20,40,2,50,69, 90)
val itb = Iterator(20,40,2,50,69, 90)
println("Maximum valued element " + ita.max )
println("Minimum valued element " + itb.min )
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
Maximum valued element 90
Minimum valued element 2
Tìm chiều dài của Trình lặp lại
Bạn có thể sử dụng it.size hoặc là it.lengthphương pháp để tìm ra số phần tử có sẵn trong một trình lặp. Ở đây, chúng tôi đã sử dụng ita và itb để thực hiện hai hoạt động khác nhau vì trình lặp chỉ có thể được duyệt một lần. Sau đây là chương trình ví dụ.
Thí dụ
object Demo {
def main(args: Array[String]) {
val ita = Iterator(20,40,2,50,69, 90)
val itb = Iterator(20,40,2,50,69, 90)
println("Value of ita.size : " + ita.size )
println("Value of itb.length : " + itb.length )
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
Value of ita.size : 6
Value of itb.length : 6
Scala Option [T] là một vùng chứa không hoặc một phần tử của một kiểu nhất định. Tùy chọn [T] có thể làSome[T] hoặc là Noneđối tượng, đại diện cho một giá trị bị thiếu. Ví dụ: phương thức get của Scala's Map tạo ra Some (giá trị) nếu một giá trị tương ứng với một khóa nhất định đã được tìm thấy, hoặcNone nếu khóa đã cho không được xác định trong Bản đồ.
Loại tùy chọn được sử dụng thường xuyên trong các chương trình Scala và bạn có thể so sánh loại này với nullgiá trị có sẵn trong Java cho biết không có giá trị. Ví dụ: phương thức get của java.util.HashMap trả về giá trị được lưu trữ trong HashMap hoặc null nếu không tìm thấy giá trị nào.
Giả sử chúng ta có một phương thức lấy một bản ghi từ cơ sở dữ liệu dựa trên một khóa chính.
def findPerson(key: Int): Option[Person]
Phương thức sẽ trả về Một số [Người] nếu bản ghi được tìm thấy nhưng Không có nếu bản ghi không được tìm thấy. Hãy cùng chúng tôi theo dõi chương trình sau đây.
Thí dụ
object Demo {
def main(args: Array[String]) {
val capitals = Map("France" -> "Paris", "Japan" -> "Tokyo")
println("capitals.get( \"France\" ) : " + capitals.get( "France" ))
println("capitals.get( \"India\" ) : " + capitals.get( "India" ))
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
capitals.get( "France" ) : Some(Paris)
capitals.get( "India" ) : None
Cách phổ biến nhất để tách các giá trị tùy chọn là thông qua đối sánh mẫu. Ví dụ, hãy thử chương trình sau.
Thí dụ
object Demo {
def main(args: Array[String]) {
val capitals = Map("France" -> "Paris", "Japan" -> "Tokyo")
println("show(capitals.get( \"Japan\")) : " + show(capitals.get( "Japan")) )
println("show(capitals.get( \"India\")) : " + show(capitals.get( "India")) )
}
def show(x: Option[String]) = x match {
case Some(s) => s
case None => "?"
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
show(capitals.get( "Japan")) : Tokyo
show(capitals.get( "India")) : ?
Sử dụng phương thức getOrElse ()
Sau đây là chương trình ví dụ để chỉ ra cách sử dụng phương thức getOrElse () để truy cập một giá trị hoặc một giá trị mặc định khi không có giá trị nào.
Thí dụ
object Demo {
def main(args: Array[String]) {
val a:Option[Int] = Some(5)
val b:Option[Int] = None
println("a.getOrElse(0): " + a.getOrElse(0) )
println("b.getOrElse(10): " + b.getOrElse(10) )
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
a.getOrElse(0): 5
b.getOrElse(10): 10
Sử dụng phương thức isEmpty ()
Sau đây là chương trình ví dụ để hiển thị cách sử dụng phương thức isEmpty () để kiểm tra xem tùy chọn có là Không có hay không.
Thí dụ
object Demo {
def main(args: Array[String]) {
val a:Option[Int] = Some(5)
val b:Option[Int] = None
println("a.isEmpty: " + a.isEmpty )
println("b.isEmpty: " + b.isEmpty )
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Thí dụ
a.isEmpty: false
b.isEmpty: true
Queue là First In First Out, cấu trúc dữ liệu FIFO và cho phép chèn và truy xuất các phần tử theo cách FIFO.
Khai báo các biến hàng đợi
Sau đây là cú pháp khai báo một biến Queue.
Cú pháp
val queue = Queue(1, 2, 3, 4, 5)
Ở đây, queue được khai báo là Queue của các số. Giá trị có thể được thêm vào phía trước bằng cách sử dụng các lệnh như sau:
Chỉ huy
queue.enqueue(6)
Giá trị có thể được truy xuất ở phía trước bằng cách sử dụng các lệnh như sau:
Chỉ huy
queue.dequeue()
Hàng đợi xử lý
Dưới đây là một chương trình ví dụ về cách tạo, khởi tạo và xử lý Hàng đợi -
Thí dụ
import scala.collection.mutable.Queue
object Demo {
def main(args: Array[String]) = {
var queue = Queue(1, 2, 3, 4, 5);
// Print queue elements
queue.foreach{(element:Int) => print(element + " ")}
println();
// Print first element
println("First Element: " + queue.front)
// Add an element
queue.enqueue(6);
// Print queue elements
queue.foreach{(element:Int) => print(element+ " ")}
println();
// Remove an element
var dq = queue.dequeue;
// Print dequeued element
println("Dequeued Element: " + dq)
// Print queue elements
queue.foreach{(element:Int) => print(element+ " ")}
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
1 2 3 4 5
First Element: 1
1 2 3 4 5 6
Dequeued Element: 1
2 3 4 5 6
Scala tuple kết hợp một số lượng cố định các mục với nhau để chúng có thể được chuyển xung quanh một cách tổng thể. Không giống như một mảng hoặc danh sách, một bộ tuple có thể chứa các đối tượng có nhiều kiểu khác nhau nhưng chúng cũng không thay đổi được.
Sau đây là ví dụ về một bộ giá trị chứa một số nguyên, một chuỗi và bảng điều khiển.
val t = (1, "hello", Console)
Đó là đường cú pháp (viết tắt) cho những điều sau:
val t = new Tuple3(1, "hello", Console)
Loại thực tế của một tuple phụ thuộc vào số lượng và các phần tử mà nó chứa cũng như kiểu của các phần tử đó. Do đó, kiểu của (99, "Luftballons") là Tuple2 [Int, String]. Loại ('u', 'r', "the", 1, 4, "me") là Tuple6 [Char, Char, String, Int, Int, String]
Tuple thuộc loại Tuple1, Tuple2, Tuple3, v.v. Hiện tại có giới hạn trên 22 trong Scala nếu bạn cần nhiều hơn, thì bạn có thể sử dụng một bộ sưu tập, không phải một bộ. Đối với mỗi kiểu TupleN, trong đó 1 <= N <= 22, Scala xác định một số phương thức truy cập phần tử. Cho định nghĩa sau:
val t = (4,3,2,1)
Để truy cập các phần tử của bộ tuple t, bạn có thể sử dụng phương pháp t._1 để truy cập phần tử đầu tiên, t._2 để truy cập phần tử thứ hai, v.v. Ví dụ, biểu thức sau đây tính tổng tất cả các phần tử của t.
val sum = t._1 + t._2 + t._3 + t._4
Bạn có thể sử dụng Tuple để viết một phương thức lấy Danh sách [Double] và trả về số đếm, tổng và tổng bình phương được trả về trong Tuple ba phần tử, Tuple3 [Int, Double, Double]. Chúng cũng hữu ích để chuyển một danh sách các giá trị dữ liệu dưới dạng thông điệp giữa các tác nhân trong lập trình đồng thời.
Hãy thử chương trình ví dụ sau. Nó chỉ ra cách sử dụng một bộ tuple.
Thí dụ
object Demo {
def main(args: Array[String]) {
val t = (4,3,2,1)
val sum = t._1 + t._2 + t._3 + t._4
println( "Sum of elements: " + sum )
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Lệnh
\>scalac Demo.scala
\>scala Demo
Đầu ra
Sum of elements: 10
Lặp lại trên Tuple
Bạn có thể dùng Tuple.productIterator() phương pháp lặp qua tất cả các phần tử của Tuple.
Hãy thử chương trình ví dụ sau để lặp qua các bộ giá trị.
Thí dụ
object Demo {
def main(args: Array[String]) {
val t = (4,3,2,1)
t.productIterator.foreach{ i =>println("Value = " + i )}
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Lệnh
\>scalac Demo.scala
\>scala Demo
Đầu ra
Value = 4
Value = 3
Value = 2
Value = 1
Chuyển đổi sang chuỗi
Bạn có thể dùng Tuple.toString()để nối tất cả các phần tử của bộ tuple thành một chuỗi. Hãy thử chương trình ví dụ sau để chuyển đổi thành Chuỗi.
Thí dụ
object Demo {
def main(args: Array[String]) {
val t = new Tuple3(1, "hello", Console)
println("Concatenated String: " + t.toString() )
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
Concatenated String: (1,hello,scala.Console$@281acd47)
Hoán đổi các phần tử
Bạn có thể dùng Tuple.swap phương thức hoán đổi các phần tử của Tuple2.
Hãy thử chương trình ví dụ sau để hoán đổi các phần tử.
Thí dụ
object Demo {
def main(args: Array[String]) {
val t = new Tuple2("Scala", "hello")
println("Swapped Tuple: " + t.swap )
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
Swapped tuple: (hello,Scala)
Scala Seq là một đặc điểm để đại diện cho các chuỗi bất biến. Cấu trúc này cung cấp quyền truy cập dựa trên chỉ mục và các phương pháp tiện ích khác nhau để tìm các phần tử, sự xuất hiện của chúng và các chuỗi con. Một Seq duy trì thứ tự chèn.
Khai báo các biến Seq
Sau đây là cú pháp khai báo một biến Seq.
Cú pháp
val seq: Seq[Int] = Seq(1, 2, 3, 4, 5)
Ở đây, seq được khai báo là Seq của các số. Seq cung cấp các lệnh như sau:
Chỉ huy
val isPresent = seq.contains(4);
val contains = seq.endsWith(Seq(4,5));
var lastIndexOf = seq.lasIndexOf(5);
Xử lý Seq
Dưới đây là một chương trình ví dụ về cách tạo, khởi tạo và xử lý Seq -
Thí dụ
import scala.collection.immutable.Seq
object Demo {
def main(args: Array[String]) = {
var seq = Seq(1, 2, 3, 4, 5, 3)
// Print seq elements
seq.foreach{(element:Int) => print(element + " ")}
println()
println("Seq ends with (5,3): " + seq.endsWith(Seq(5, 3)))
println("Seq contains 4: " + seq.contains(4))
println("Last index of 3: " + seq.lastIndexOf(3))
println("Reversed Seq" + seq.reverse)
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
1 2 3 4 5 3
Seq ends with (5,3): true
Seq contains 4: true
Last index of 3: 5
Reversed SeqList(3, 5, 4, 3, 2, 1)
Stack là Last In First Out, cấu trúc dữ liệu LIFO và cho phép chèn và truy xuất phần tử ở trên cùng, theo cách thức LIFO.
Khai báo các biến ngăn xếp
Sau đây là cú pháp khai báo một biến Stack.
Cú pháp
val stack = Stack(1, 2, 3, 4, 5)
Ở đây, ngăn xếp được khai báo là một Ngăn xếp số. Giá trị có thể được thêm vào ở trên cùng bằng cách sử dụng các lệnh như sau:
Chỉ huy
stack.push(6)
Giá trị có thể được truy xuất từ trên cùng bằng cách sử dụng các lệnh như sau:
Chỉ huy
stack.top
Giá trị có thể được xóa khỏi đầu bằng cách sử dụng các lệnh như sau:
Chỉ huy
stack.pop
Xử lý ngăn xếp
Dưới đây là một chương trình ví dụ về cách tạo, khởi tạo và xử lý Stack -
Thí dụ
import scala.collection.mutable.Stack
object Demo {
def main(args: Array[String]) = {
var stack: Stack[Int] = Stack();
// Add elements
stack.push(1);
stack.push(2);
// Print element at top
println("Top Element: " + stack.top)
// Print element
println("Removed Element: " + stack.pop())
// Print element
println("Top Element: " + stack.top)
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
Top Element: 2
Removed Element: 2
Top Element: 1
Scala Stream là danh sách đặc biệt với tính năng đánh giá lười biếng. Trong luồng scala, các phần tử chỉ được đánh giá khi chúng cần thiết. Stream hỗ trợ tính toán lười biếng và hiểu biết về hiệu suất.
Khai báo các biến luồng
Sau đây là cú pháp để khai báo một biến Stream.
Cú pháp
val stream = 1 #:: 2 #:: 3 #:: Stream.empty
Ở đây, luồng được khai báo là một luồng số. Đây 1 là đầu suối, 2, 3 là đuôi suối. Stream.empty đánh dấu sự kết thúc của luồng. Giá trị có thể được lấy lại bằng cách sử dụng các lệnh như sau:
Chỉ huy
stream.take(2)
Luồng xử lý
Dưới đây là một chương trình ví dụ về cách tạo, khởi tạo và xử lý Luồng -
Thí dụ
import scala.collection.immutable.Stream
object Demo {
def main(args: Array[String]) = {
val stream = 1 #:: 2 #:: 3 #:: Stream.empty
// print stream
println(stream)
// Print first two elements
stream.take(2).print
println()
// Create an empty stream
val stream1: Stream[Int] = Stream.empty[Int]
// Print element
println(s"Stream: $stream1")
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
Stream(1, <not computed>)
1, 2
Stream: Stream()
drop () method là method được List sử dụng để chọn tất cả các phần tử ngoại trừ n phần tử đầu tiên của danh sách.
Cú pháp
Sau đây là cú pháp của drop method.
def drop(n: Int): List[A]
Ở đây, n là số phần tử được loại bỏ khỏi danh sách. Phương thức này trả về tất cả các phần tử của danh sách ngoại trừ n phần tử đầu tiên.
Sử dụng
Dưới đây là một chương trình ví dụ về cách sử dụng phương pháp thả -
Thí dụ
object Demo {
def main(args: Array[String]) = {
val list = List(1, 2, 3, 4, 5)
// print list
println(list)
//apply operation
val result = list.drop(3)
//print result
println(result)
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
List(1, 2, 3, 4, 5)
List(4, 5)
dropWhile () method là phương thức được List sử dụng để loại bỏ tất cả các phần tử thỏa mãn một điều kiện nhất định.
Cú pháp
Sau đây là cú pháp của phương thức dropWhile.
def dropWhile(p: (A) => Boolean): List[A]
Ở đây, p: (A) => Boolean là một vị từ hoặc điều kiện được áp dụng cho mỗi phần tử của danh sách. Phương thức này trả về tất cả các phần tử của danh sách ngoại trừ những phần tử bị loại bỏ.
Sử dụng
Dưới đây là một chương trình ví dụ về cách sử dụng phương thức dropWhile -
Thí dụ
object Demo {
def main(args: Array[String]) = {
val list = List(3, 6, 9, 4, 2)
// print list
println(list)
//apply operation
val result = list.dropWhile(x=>{x % 3 == 0})
//print result
println(result)
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
List(3, 6, 9, 4, 2)
List(4, 2)
Phương thức filter () là phương thức được List sử dụng để chọn tất cả các phần tử thỏa mãn một vị từ nhất định.
Cú pháp
Sau đây là cú pháp của phương thức lọc.
def filter(p: (A) => Boolean): List[A]
Ở đây, p: (A) => Boolean là một vị từ hoặc điều kiện được áp dụng cho mỗi phần tử của danh sách. Phương thức này trả về tất cả các phần tử của danh sách thỏa mãn điều kiện đã cho.
Sử dụng
Dưới đây là một chương trình ví dụ về cách sử dụng phương pháp bộ lọc -
Thí dụ
object Demo {
def main(args: Array[String]) = {
val list = List(3, 6, 9, 4, 2)
// print list
println(list)
//apply operation
val result = list.filter(x=>{x % 3 == 0})
//print result
println(result)
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
List(3, 6, 9, 4, 2)
List(3, 6, 9)
Phương thức find () là phương thức được sử dụng bởi Iterator để tìm một phần tử thỏa mãn một vị từ cho trước.
Cú pháp
Sau đây là cú pháp của phương thức tìm.
def find(p: (A) => Boolean): Option[A]
Ở đây, p: (A) => Boolean là một vị từ hoặc điều kiện được áp dụng trên mỗi phần tử của trình lặp. Phương thức này trả về phần tử Option chứa phần tử phù hợp của trình vòng lặp thỏa mãn điều kiện đã cho.
Sử dụng
Dưới đây là một chương trình ví dụ về cách sử dụng phương thức find -
Thí dụ
object Demo {
def main(args: Array[String]) = {
val iterator = Iterator(3, 6, 9, 4, 2)
//apply operation
val result = iterator.find(x=>{x % 3 == 0})
//print result
println(result)
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
Some(3)
Phương thức flatMap () là phương thức của đặc điểm TraversableLike, nó nhận một vị từ, áp dụng nó cho từng phần tử của tập hợp và trả về một tập hợp mới các phần tử được trả về bởi vị từ.
Cú pháp
Sau đây là cú pháp của phương thức flatMap.
def flatMap[B](f: (A) ? GenTraversableOnce[B]): TraversableOnce[B]
Đây, f: (A)? GenTraversableOnce [B] là một vị từ hoặc điều kiện được áp dụng trên mỗi phần tử của tập hợp. Phương thức này trả về phần tử Option chứa phần tử phù hợp của trình vòng lặp thỏa mãn điều kiện đã cho.
Sử dụng
Dưới đây là một chương trình ví dụ về cách sử dụng phương thức flatMap -
Thí dụ
object Demo {
def main(args: Array[String]) = {
val list = List(1, 5, 10)
//apply operation
val result = list.flatMap{x => List(x,x+1)}
//print result
println(result)
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
List(1, 2, 5, 6, 10, 11)
Phương thức flatten () là một đặc điểm GenericTraversableTemplate thành viên, nó trả về một tập hợp các phần tử bằng cách hợp nhất các tập hợp con.
Cú pháp
Sau đây là cú pháp của phương thức flatten.
def flatten[B]: Traversable[B]
Đây, f: (A)? GenTraversableOnce [B] là một vị từ hoặc điều kiện được áp dụng trên mỗi phần tử của tập hợp. Phương thức này trả về phần tử Option chứa phần tử phù hợp của trình vòng lặp thỏa mãn điều kiện đã cho.
Sử dụng
Dưới đây là một chương trình ví dụ về cách sử dụng phương pháp làm phẳng -
Thí dụ
object Demo {
def main(args: Array[String]) = {
val list = List(List(1,2), List(3,4))
//apply operation
val result = list.flatten
//print result
println(result)
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
List(1, 2, 3, 4)
Phương thức fold () là một thành viên của đặc điểm TraversableOnce, nó được sử dụng để thu gọn các phần tử của tập hợp.
Cú pháp
Sau đây là cú pháp của phương thức gấp.
def fold[A1 >: A](z: A1)(op: (A1, A1) ? A1): A1
Ở đây, phương thức gấp lấy hàm toán tử nhị phân kết hợp làm tham số. Phương thức này trả về kết quả là giá trị. Nó coi đầu vào đầu tiên là giá trị ban đầu và đầu vào thứ hai là một hàm (lấy giá trị tích lũy và mục hiện tại làm đầu vào).
Sử dụng
Dưới đây là một chương trình ví dụ về cách sử dụng phương pháp gấp -
Thí dụ
object Demo {
def main(args: Array[String]) = {
val list = List(1, 2, 3 ,4)
//apply operation to get sum of all elements of the list
val result = list.fold(0)(_ + _)
//print result
println(result)
}
}
Ở đây chúng tôi đã chuyển 0 làm giá trị ban đầu cho hàm gấp và sau đó tất cả các giá trị được thêm vào. Lưu chương trình trên vàoDemo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
10
Phương thức foldLeft () là một thành viên của đặc điểm TraversableOnce, nó được sử dụng để thu gọn các phần tử của tập hợp. Nó điều hướng các phần tử theo thứ tự từ Trái sang Phải. Nó chủ yếu được sử dụng trong các hàm đệ quy và ngăn các ngoại lệ tràn ngăn xếp.
Cú pháp
Sau đây là cú pháp của phương thức gấp.
def foldLeft[B](z: B)(op: (B, A) ? B): B
Ở đây, phương thức foldLeft nhận hàm toán tử nhị phân kết hợp làm tham số. Phương thức này trả về kết quả là giá trị.
Sử dụng
Dưới đây là một chương trình ví dụ về cách sử dụng phương thức foldLeft -
Thí dụ
object Demo {
def main(args: Array[String]) = {
val list = List(1, 2, 3 ,4)
//apply operation to get sum of all elements of the list
val result = list.foldLeft(0)(_ + _)
//print result
println(result)
}
}
Ở đây chúng tôi đã chuyển 0 làm giá trị ban đầu cho hàm gấp và sau đó tất cả các giá trị được thêm vào. Lưu chương trình trên vàoDemo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
10
Phương thức foldRight () là một thành viên của đặc điểm TraversableOnce, nó được sử dụng để thu gọn các phần tử của tập hợp. Nó điều hướng các phần tử theo thứ tự từ phải sang trái.
Cú pháp
Sau đây là cú pháp của phương thức foldRight.
def foldRight[B](z: B)(op: (B, A) ? B): B
Ở đây, phương thức gấp lấy hàm toán tử nhị phân kết hợp làm tham số. Phương thức này trả về giá trị kết quả.
Sử dụng
Dưới đây là một chương trình ví dụ về cách sử dụng phương thức foldRight -
Thí dụ
object Demo {
def main(args: Array[String]) = {
val list = List(1, 2, 3 ,4)
//apply operation to get sum of all elements of the list
val result = list.foldRight(0)(_ + _)
//print result
println(result)
}
}
Ở đây chúng tôi đã chuyển 0 làm giá trị ban đầu cho hàm foldRight và sau đó tất cả các giá trị được thêm vào. Lưu chương trình trên vàoDemo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
10
Phương thức map () là một thành viên của đặc điểm TraversableLike, nó được sử dụng để chạy một phương thức vị từ trên mỗi phần tử của một tập hợp. Nó trả về một bộ sưu tập mới.
Cú pháp
Sau đây là cú pháp của phương pháp bản đồ.
def map[B](f: (A) ? B): Traversable[B]
Ở đây, phương thức bản đồ lấy một hàm dự đoán làm tham số. Phương thức này trả về tập hợp đã cập nhật.
Sử dụng
Dưới đây là một chương trình ví dụ về cách sử dụng phương pháp bản đồ -
Thí dụ
object Demo {
def main(args: Array[String]) = {
val list = List(1, 2, 3 ,4)
//apply operation to get twice of each element.
val result = list.map(_ * 2)
//print result
println(result)
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
List(2, 4, 6, 8)
Phương thức partition () là một thành viên của đặc điểm TraversableLike, nó được sử dụng để chạy một phương thức vị từ trên mỗi phần tử của một tập hợp. Nó trả về hai tập hợp, một tập hợp gồm các phần tử thỏa mãn một hàm vị từ nhất định và một tập hợp khác chứa các phần tử không thỏa mãn chức năng vị từ đã cho.
Cú pháp
Sau đây là cú pháp của phương pháp bản đồ.
def partition(p: (A) ? Boolean): (Repr, Repr)
Ở đây, phương thức phân vùng nhận một hàm dự đoán làm tham số. Phương thức này trả về các tập hợp.
Sử dụng
Dưới đây là một chương trình ví dụ về cách sử dụng phương pháp phân vùng:
Thí dụ
object Demo {
def main(args: Array[String]) = {
val list = List(1, 2, 3, 4, 5, 6, 7)
//apply operation to get twice of each element.
val (result1, result2) = list.partition(x=>{x % 3 == 0})
//print result
println(result1)
println(result2)
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
List(3, 6)
List(1, 2, 4, 5, 7)
Phương thức Reduce () là một thành viên của đặc điểm TraversableOnce, nó được sử dụng để thu gọn các phần tử của tập hợp. Nó tương tự như phương pháp gấp nhưng nó không nhận giá trị ban đầu.
Cú pháp
Sau đây là cú pháp của phương thức giảm.
def reduce[A1 >: A](op: (A1, A1) ? A1): A1
Ở đây, phương thức Reduce nhận hàm toán tử nhị phân kết hợp làm tham số. Phương thức này trả về giá trị kết quả.
Sử dụng
Dưới đây là một chương trình ví dụ về cách sử dụng phương pháp gấp -
Thí dụ
object Demo {
def main(args: Array[String]) = {
val list = List(1, 2, 3 ,4)
//apply operation to get sum of all elements of the list
val result = list.reduce(_ + _)
//print result
println(result)
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
10
phương thức scan () là một thành viên của đặc điểm TraversableLike, nó tương tự như phương thức gấp nhưng được sử dụng để áp dụng một phép toán trên từng phần tử của tập hợp và trả về tập hợp.
Cú pháp
Sau đây là cú pháp của phương thức gấp.
def scan[B >: A, That](z: B)(op: (B, B) ? B)(implicit cbf: CanBuildFrom[Repr, B, That]): That
Ở đây, phương thức quét nhận hàm toán tử nhị phân kết hợp làm tham số. Phương thức này trả về kết quả là tập hợp được cập nhật. Nó coi đầu vào đầu tiên là giá trị ban đầu và đầu vào thứ hai là một hàm.
Sử dụng
Dưới đây là một chương trình ví dụ về cách sử dụng phương pháp quét -
Thí dụ
object Demo {
def main(args: Array[String]) = {
val list = List(1, 2, 3 ,4)
//apply operation to create a running total of all elements of the list
val list1 = list.scan(0)(_ + _)
//print list
println(list1)
}
}
Ở đây chúng tôi đã chuyển 0 làm giá trị ban đầu cho hàm quét và sau đó tất cả các giá trị được thêm vào. Lưu chương trình trên vàoDemo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
List(0, 1, 3, 6, 10)
Phương thức zip () là một thành viên của đặc điểm IterableLike, nó được sử dụng để hợp nhất một tập hợp với tập hợp hiện tại và kết quả là một tập hợp các cặp phần tử tuple từ cả hai tập hợp.
Cú pháp
Sau đây là cú pháp của phương thức zip.
def zip[B](that: GenIterable[B]): Iterable[(A, B)]
Ở đây, phương thức zip lấy một tập hợp làm tham số. Phương thức này trả về kết quả là tập hợp các cặp được cập nhật.
Sử dụng
Dưới đây là một chương trình ví dụ về cách sử dụng phương pháp zip:
Thí dụ
object Demo {
def main(args: Array[String]) = {
val list = List(1, 2, 3 ,4)
val list1 = List("A", "B", "C", "D")
//apply operation to create a zip of list
val list2 = list zip list1
//print list
println(list2)
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
List((1,A), (2,B), (3,C), (4,D))