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::, đượ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ộ,immutablemutable. 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 đồ,immutablemutable. 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 nexthasNext. 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.minit.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ụngitaitbđể 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))