Учебники

Скала — Массивы

Scala предоставляет структуру данных, массив , в котором хранится последовательная коллекция фиксированного размера элементов одного типа. Массив используется для хранения коллекции данных, но часто более полезно думать о массиве как о коллекции переменных одного типа.

Вместо того, чтобы объявлять отдельные переменные, такие как number0, number1, … и number99, вы объявляете одну переменную массива, такую ​​как числа, и используете числа [0], числа [1] и …, числа [99] для представления отдельные переменные. В этом руководстве рассказывается, как объявлять переменные массива, создавать массивы и обрабатывать массивы с использованием индексированных переменных. Индекс первого элемента массива — это число ноль, а индекс последнего элемента — это общее количество элементов минус один.

Объявление переменных массива

Чтобы использовать массив в программе, вы должны объявить переменную для ссылки на массив и указать тип массива, на который может ссылаться переменная.

Ниже приведен синтаксис объявления переменной массива.

Синтаксис

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

or

var z = new Array[String](3)

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

команда

z(0) = "Zara"; z(1) = "Nuha"; z(4/2) = "Ayan"

Здесь последний пример показывает, что в общем случае индексом может быть любое выражение, которое выдает целое число. Есть еще один способ определения массива —

var z = Array("Zara", "Nuha", "Ayan")

Следующая картинка представляет массив myList . Здесь myList содержит десять двойных значений и индексы от 0 до 9.

Scala Array

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

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

Ниже приведен пример программы, показывающей, как создавать, инициализировать и обрабатывать массивы.

пример

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);
   }
}

Сохраните вышеуказанную программу в Demo.scala . Следующие команды используются для компиляции и выполнения этой программы.

команда

\>scalac Demo.scala
\>scala Demo

Выход

1.9
2.9
3.4
3.5
Total is 11.7
Max is 3.5

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

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

Существует много ситуаций, когда вам необходимо определить и использовать многомерные массивы (т. Е. Массивы, элементы которых являются массивами). Например, матрицы и таблицы являются примерами структур, которые могут быть реализованы в виде двумерных массивов.

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

var myMatrix = ofDim[Int](3,3)

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

Попробуйте следующий пример программы для обработки многомерного массива —

пример

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();
      }
   }
}

Сохраните вышеуказанную программу в Demo.scala . Следующие команды используются для компиляции и выполнения этой программы.

команда

\>scalac Demo.scala
\>scala Demo

Выход

0 1 2
0 1 2
0 1 2

Конкатенированные массивы

Попробуйте следующий пример, который использует метод concat () для объединения двух массивов. Вы можете передать более одного массива в качестве аргументов метода concat ().

пример

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 )
      }
   }
}

Сохраните вышеуказанную программу в Demo.scala . Следующие команды используются для компиляции и выполнения этой программы.

команда

\>scalac Demo.scala
\>scala Demo

Выход

1.9
2.9
3.4
3.5
8.9
7.9
0.4
1.5

Создать массив с диапазоном

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

Давайте возьмем пример создания массива диапазона (10, 20, 2): это означает создание массива с элементами между 10 и 20 и разностью диапазона 2. Элементами в массиве являются 10, 12, 14, 16 и 18. ,

Другой пример: диапазон (10, 20). Здесь разница в диапазоне не указана, поэтому по умолчанию используется 1 элемент. Он создает массив с элементами от 10 до 20 с разницей в диапазоне 1. Элементами массива являются 10, 11, 12, 13,… и 19.

В следующем примере программы показано, как создать массив с диапазонами.

пример

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 )
      }
   }
}

Сохраните вышеуказанную программу в Demo.scala . Следующие команды используются для компиляции и выполнения этой программы.

команда

\>scalac Demo.scala
\>scala Demo

Выход

10 12 14 16 18
10 11 12 13 14 15 16 17 18 19

Scala Array Методы

Ниже приведены важные методы, которые вы можете использовать при игре с массивом. Как показано выше, вам придется импортировать пакет Array._ перед использованием любого из упомянутых методов. Для полного списка доступных методов, пожалуйста, проверьте официальную документацию Scala.

def apply (x: T, xs: T *): массив [T]

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

def concat [T] (xss: массив [T] *): массив [T]

Объединяет все массивы в один массив.

def copy (src: AnyRef, srcPos: Int, dest: AnyRef, destPos: Int, длина: Int): единица измерения

Скопируйте один массив в другой. Эквивалент Java System.arraycopy (src, srcPos, dest, destPos, length).

def empty [T]: Array [T]

Возвращает массив длины 0

def iterate [T] (начало: T, len: Int) (f: (T) => T): массив [T]

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

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

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

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

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

def iterate [T] (начало: T, len: Int) (f: (T) => T): массив [T]

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

def ofDim [T] (n1: Int): массив [T]

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

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

Создает 2-мерный массив

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

Создает 3-мерный массив

диапазон определения (начало: Int, конец: Int, шаг: Int): Array [Int]

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

диапазон определения (начало: Int, конец: Int): Array [Int]

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

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

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

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

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