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

Scala数组

Scala fornisce array per memorizzare elementi di tipo omogeneo di dimensione fissa, che sono una delle strutture dati importanti per ogni linguaggio di programmazione.

Dichiarare una variabile array non significa dichiarare number0, number1, ..., number99 come variabili singole separate, ma dichiarare una variabile come numbers, quindi utilizzare numbers[0], numbers[1], ..., numbers[99] per rappresentare variabili singole. Un elemento specifico dell'array è acceduto tramite l'indice.

L'indice del primo elemento dell'array è 0 e l'indice dell'ultimo elemento è il numero totale di elementi meno 1.

Dichiarazione dell'array

Ecco il formato della sintassi di dichiarazione dell'array Scala:

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

Nella sintassi elencata, z dichiara un array di tipo stringa, con una lunghezza di 3 e può memorizzare 3 elementi. Possiamo impostare un valore per ogni elemento e accedere a ciascun elemento tramite l'indice, come indicato di seguito:

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

L'indice dell'ultimo elemento è utilizzato con l'espressione 4/2 Come indice, è simile a z(2) = "Google"

Possiamo anche definire un array utilizzando il seguente metodo:

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

La figura seguente mostra un array myList di lunghezza 10, con indici da 0 a 9:

Gestione degli array

Il tipo degli elementi dell'array e la dimensione dell'array sono determinati, quindi quando si gestiscono gli elementi dell'array, di solito si utilizza un ciclo for di base.

Esempio seguente dimostra la creazione, inizializzazione e altri processi di gestione degli array:

object Test {
   def main(args: Array[String]) {
      var myList = Array(1.9, 2.9, 3.4, 3.5)
      
      // 输出所有数组元素
      for (x <- myList) {
         println(x)
      }
      // Calcola la somma di tutti gli elementi dell'array
      var total = 0.0;
      for (i <- 0 to (myList.length - 1)) {
         total += myList(i);
      }
      println("La somma è " + total)
      // Cerca l'elemento massimo dell'array
      var max = myList(0)
      for (i <- 1 to (myList.length - 1)) {
         if (myList(i) > max) max = myList(i)
      }
      println("Il valore massimo è " + max)
    
   }
}

Eseguendo il codice sopra, il risultato di output è:

$ scalac Test.scala
$ scala Test
1.9
2.9
3.4
3.5
La somma è 11.7
Il valore massimo è 3.5

Array multidimensionale

Un array multidimensionale può avere valori che sono altri array, e i valori di altri array possono anche essere array. La matrice e la tabella sono tipi comuni di array bidimensionali.

Ecco un esempio di definizione di un array bidimensionale:

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

Nel esempio, l'array contiene tre elementi di array, ciascuno dei quali contiene tre valori.

Ecco un esempio completo di gestione di un array bidimensionale:

import Array._
object Test {
   def main(args: Array[String]) {
      val myMatrix = Array.ofDim[Int](3, 3)
      
      // Creazione della matrice
      for (i <- 0 to 2) {
         for (j <- 0 to 2) {
            myMatrix(i)(j) = j;
         }
      }
      
      // Stampa la matrice bidimensionale
      for (i <- 0 to 2) {
         for (j <- 0 to 2) {
            print(" " + myMatrix(i)(j));
         }
         println();
      }
    
   }
}

Eseguendo il codice sopra, il risultato di output è:

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

Unisce array

Nell'esempio seguente, abbiamo utilizzato il metodo concat() per combinare due array, concat() accetta più parametri di array:

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

Eseguendo il codice sopra, il risultato di output è:

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

Creazione di un array di intervallo

Nell'esempio seguente, abbiamo utilizzato il metodo range() per generare un array di intervallo. L'ultimo parametro del metodo range() è lo step, che di default è 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 )
      }
   }
}

Eseguendo il codice sopra, il risultato di output è:

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

Metodi degli array Scala

La tabella sottostante elenca i metodi importanti per la gestione degli array nel linguaggio Scala, che dobbiamo utilizzare prima di usarli. import Array._ Importa il pacchetto.

NumeroMetodi e descrizioni
1

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

Crea un array specificato dall'oggetto T, il valore di T può essere Unit, Double, Float, Long, Int, Char, Short, Byte, Boolean.

2

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

Unisce array

3

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

Copia un array in un altro array. Uguale a Java's System.arraycopy(src, srcPos, dest, destPos, length).

4

def empty[T]: Array[T]

Restituisce un array di lunghezza 0.

5

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

Restituisce un array di lunghezza specificata, con ogni elemento che è il valore di ritorno della funzione specificata.

L'esempio di array sopra ha un valore iniziale di 0, una lunghezza di 3 e una funzione di calcolo.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]

Restituisce un array di lunghezza specificata dal primo parametro, con ogni elemento riempito con il secondo parametro.

7

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

Restituisce un array bidimensionale di lunghezza specificata dal primo parametro, con ogni elemento riempito con il secondo parametro.

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开始。