English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Массивы в Scala

Массивы, предоставляемые языком Scala, предназначены для хранения элементов одного и того же типа фиксированного размера и являются одним из важнейших данных структурами для каждого языка программирования.

Объявление массива переменной не означает объявление number0, number1, ..., number99 отдельных переменных, а означает объявление одной переменной, такой как numbers, и использование numbers[0], numbers[1], ..., numbers[99] для представления отдельных переменных. Элемент массива, который нужно получить, можно получить через индекс.

Первый элемент массива имеет индекс 0, а последний элемент имеет индекс, равный числу элементов в массиве минус 1.

Объявление массива

Ниже приведен формат синтаксиса объявления массива в Scala:

var z:Array[String] = new Array[String](3)
или
var z = new Array[String](3)

В приведенной выше синтаксисе, z объявляет массив строкового типа, длина которого составляет 3, и может хранить 3 элемента. Мы можем устанавливать значения для каждого элемента и доступ к каждому элементу через индекс, как показано ниже:

z(0) = "w3codebox"; z(1) = "Baidu"; z(4/2) = "Google"

Индекс последнего элемента используется выражением 4/2 В качестве индекса, аналогично z(2) = "Google".

Мы также можем определить массив следующим образом:

var z = Array("w3codebox", "Baidu", "Google")

На следующем рисунке показан массив myList длиной 10, индексы от 0 до 9:

Обработка массива

Тип элементов массива и размер массива определены, поэтому при обработке элементов массива мы обычно используем базовый цикл for.

Ниже приведен пример создания, инициализации и обработки массива:

object Test {
   def main(args: Array[String]) {
      var myList = Array(1.9, 2.9, 3.4, 3.5)
      
      // 输出所有数组元素
      for ( x <- myList ) {
         println(x)
      }
      // вычисление суммы всех элементов массива
      var total = 0.0;
      for ( i <- 0 to (myList.length - 1)) {
         total += myList(i);
      }
      println("Общий объем составляет " + total)}
      // Поиск максимального элемента массива
      var max = myList(0);
      for (i <- 1 to (myList.length - 1)) {
         if (myList(i) > max) max = myList(i);
      }
      println("Максимальное значение равно " + max);
    
   }
}

Выполнение вышеуказанного кода, результат вывода:

$ scalac Test.scala
$ scala Test
1.9
2.9
3.4
3.5
Общий объем составляет 11.7
Максимальное значение равно 3.5

Многоуровневые массивы

Многоуровневые массивы: значение одного массива может быть другим массивом, а значение другого массива может быть также массивом. Матрицы и таблицы — это常见的 примеры двумерных массивов.

Вот пример определения двумерного массива:

val myMatrix = Array.ofDim[Int](3, 3)

В примере массив содержит три массива элементов, каждый из которых содержит три значения.

Давайте рассмотрим полный пример обработки двумерного массива:

import Array._
object Test {
   def main(args: Array[String]) {
      val myMatrix = Array.ofDim[Int](3, 3)
      
      // Создание матрицы
      for (i <- 0 to 2) {
         for (j <- 0 to 2) {
            myMatrix(i)(j) = j;
         }
      }
      
      // Печать двумерного массива
      for (i <- 0 to 2) {
         for (j <- 0 to 2) {
            print(" " + myMatrix(i)(j));
         }
         println();
      }
    
   }
}

Выполнение вышеуказанного кода, результат вывода:

$ scalac Test.scala
$ scala Test
0 1 2
0 1 2
0 1 2

Объединение массивов

В следующем примере мы используем метод concat() для объединения двух массивов. Метод concat() принимает несколько параметров-массивов:

import Array._
object Test {
   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)
      
      // 输出所有数组元素
      for (x <- myList3) {
         println(x)
      }
   }
}

Выполнение вышеуказанного кода, результат вывода:

$ scalac Test.scala
$ scala Test
1.9
2.9
3.4
3.5
8.9
7.9
0.4
1.5

Создание массива интервала

В следующем примере мы используем метод range() для генерации массива в интервале. Последний параметр метода range() является шагом, по умолчанию равным 1:

import Array._
object Test {
   def main(args: Array[String]) {
      var myList1 = range(10, 20, 2)
      var myList2 = range(10, 20)
      // 输出所有数组元素
      for (x <- myList1) {
         print( " " + x )
      }
      println()
      for ( x <- myList2 ) {
         print( " " + x )
      }
   }
}

Выполнение вышеуказанного кода, результат вывода:

$ scalac Test.scala
$ scala Test
10 12 14 16 18
10 11 12 13 14 15 16 17 18 19

Методы массивов Scala

В таблице ниже перечислены важные методы обработки массивов в языке Scala, перед использованием которых нам нужно использовать import Array._ Ввод пакета.

НомерМетоды и описание
1

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

Создание массива指定的 объекта T, значение T может быть Unit, Double, Float, Long, Int, Char, Short, Byte, Boolean.

2

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

Объединение массивов

3

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

Копирование массива в другой массив. Равносильно Java's System.arraycopy(src, srcPos, dest, destPos, length).

4

def empty[T]: Array[T]

Возврат массива длиной 0

5

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

Возврат массива указанной длины, каждый элемент массива является значением функции.

В примере выше начальное значение массива 0, длина 3, функция вычисления:a=>a+1:

scala> Array.iterate(0,3)(a=>a+1)
res1: Array[Int] = Array(0, 1, 2)
6

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

Возврат массива, длина которого определена первым параметром, а каждый элемент заполнен вторым параметром.

7

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

Возврат массива в массиве, длина которого определена первым параметром, а каждый элемент заполнен вторым параметром.

8

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

Создать массив заданной длины

9

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

Создать двумерный массив

10

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

Создать ثلاثмерный массив

11

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

Создать массив в заданном интервале, step - шаг между элементами

12

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

Создать массив в заданном интервале

13

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

Вернуть массив заданной длины, каждый элемент массива является значением функции, по умолчанию начальный индекс 0.

Пример выше возвращает 3 элемента:

scala> Array.tabulate(3)(a => a + 5)
res0: Array[Int] = Array(5, 6, 7)
14

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

Вернуть двумерный массив заданной длины, каждый элемент массива является значением функции, по умолчанию начальный индекс 0.