Scala - Mảng

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 như 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 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ác cấu trúc liên tục lặp 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 trước.

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.

Mảng đa chiều

Có nhiều tình huống mà bạn sẽ 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

Nối các mảng

Hãy thử ví dụ sau sử dụng phương thức concat () để nối hai mảng. Bạn có thể truyền nhiều hơn một mảng làm đối số cho phương thức concat ().

Thí dụ

import Array._

object Demo {
   def main(args: Array[String]) {
      var myList1 = Array(1.9, 2.9, 3.4, 3.5)
      var myList2 = Array(8.9, 7.9, 0.4, 1.5)

      var myList3 =  concat( myList1, myList2)
      
      // Print all the array elements
      for ( x <- myList3 ) {
         println( 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

1.9
2.9
3.4
3.5
8.9
7.9
0.4
1.5

Tạo Mảng với Phạm vi

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 với 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ử trong khoảng từ 10 đến 20 với sự khác biệt về 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

Phương thức mảng Scala

Sau đây là các phương pháp quan trọng mà bạn có thể sử dụng khi chơi với mảng. Như được hiển thị ở trên, bạn sẽ phải nhậpArray._gói trước khi sử dụng bất kỳ phương pháp nào đã đề cập. Để có danh sách đầy đủ các phương pháp có sẵn, vui lòng kiểm tra tài liệu chính thức của Scala.

Sr.No Phương pháp với Mô tả
1

def apply( x: T, xs: T* ): Array[T]

Tạo một mảng các đối tượng T, trong đó T có thể là Unit, Double, Float, Long, Int, Char, Short, Byte, Boolean.

2

def concat[T]( xss: Array[T]* ): Array[T]

Nối tất cả các mảng thành một mảng duy nhất.

3

def copy( src: AnyRef, srcPos: Int, dest: AnyRef, destPos: Int, length: Int ): Unit

Sao chép mảng này sang mảng khác. Tương đương với System.arraycopy của Java (src, srcPos, dest, destPos, length).

4

def empty[T]: Array[T]

Trả về một mảng có độ dài 0

5

def iterate[T]( start: T, len: Int )( f: (T) => T ): Array[T]

Trả về một mảng chứa các ứng dụng lặp lại của một hàm về giá trị bắt đầu.

6

def fill[T]( n: Int )(elem: => T): Array[T]

Trả về một mảng có chứa kết quả của một số phép tính phần tử một số lần.

7

def fill[T]( n1: Int, n2: Int )( elem: => T ): Array[Array[T]]

Trả về một mảng hai chiều chứa kết quả của một số phép tính phần tử một số lần.

số 8

def iterate[T]( start: T, len: Int)( f: (T) => T ): Array[T]

Trả về một mảng chứa các ứng dụng lặp lại của một hàm về giá trị bắt đầu.

9

def ofDim[T]( n1: Int ): Array[T]

Tạo mảng với kích thước nhất định.

10

def ofDim[T]( n1: Int, n2: Int ): Array[Array[T]]

Tạo mảng 2 chiều

11

def ofDim[T]( n1: Int, n2: Int, n3: Int ): Array[Array[Array[T]]]

Tạo mảng 3 chiều

12

def range( start: Int, end: Int, step: Int ): Array[Int]

Trả về một mảng chứa các giá trị cách đều nhau trong một số khoảng số nguyên.

13

def range( start: Int, end: Int ): Array[Int]

Trả về 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.

14

def tabulate[T]( n: Int )(f: (Int)=> T): Array[T]

Trả về một mảng chứa các giá trị của một hàm đã cho trên một dải giá trị nguyên bắt đầu từ 0.

15

def tabulate[T]( n1: Int, n2: Int )( f: (Int, Int ) => T): Array[Array[T]]

Trả về mảng hai chiều chứa các giá trị của một hàm đã cho trên phạm vi giá trị số nguyên bắt đầu từ 0.