English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Массивы, предоставляемые языком 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, перед использованием которых нам нужно использовать 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. |