Tableau Scala


Les tableaux fournis dans le langage Scala sont utilisés pour stocker des éléments de taille fixe du même type. Les tableaux sont l'une des structures de données importantes pour chaque langage d'édition.

Déclarer une variable tableau ne consiste pas à déclarer number0, number1,..., number99 comme variables distinctes, mais à déclarer une variable comme des nombres, puis à utiliser des nombres[0], des nombres[1], ..., des nombres[99] pour représenter des variables individuelles. Un élément spécifique du tableau est accessible par index.

Le premier élément du tableau a un indice de 0 et le dernier élément a un indice du nombre total d'éléments moins 1.


Déclarer un tableau

Voici le format syntaxique de la déclaration de tableau Scala :

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

或

var z = new Array[String](3)

Dans la syntaxe ci-dessus, z déclare un tableau de type chaîne, et la longueur du tableau est de 3, peut stocker 3 éléments. Nous pouvons définir une valeur pour chaque élément et accéder à chaque élément par index comme suit :

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

L'index du dernier élément utilise l'expression 4/2 comme index, similaire à z(2) = "Google".

On peut également définir un tableau de la manière suivante :

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

La figure suivante montre un tableau myList d'une longueur de 10, avec des valeurs d'index de 0 à 9 :

java_array.jpg


Traitement des tableaux

Le type d'élément du tableau et la taille du tableau sont déterminés, donc lors du traitement des éléments du tableau, nous utilisons généralement une base pour boucle.

Les exemples suivants démontrent la création, l'initialisation et d'autres traitements de tableaux :

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

Exécutez le code ci-dessus, le résultat de sortie est :

$ scalac Test.scala
$ scala Test
1.9
2.9
3.4
3.5
总和为 11.7
最大值为 3.5

Multidimensionnel array

Tableaux multidimensionnels Les valeurs d'un tableau peuvent être un autre tableau, et les valeurs d'un autre tableau peuvent également être un tableau. Les matrices et les tableaux sont nos tableaux bidimensionnels courants.

Ce qui précède est un exemple qui définit un tableau bidimensionnel :

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

Dans l'exemple, le tableau contient trois éléments du tableau, et chaque élément du tableau contient trois valeurs.

Regardons ensuite un exemple complet de traitement de tableau bidimensionnel :

import Array._

object Test {
   def main(args: Array[String]) {
      var myMatrix = 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();
      }
    
   }
}

Exemple d'exécution»

Exécutez le code ci-dessus, le résultat de sortie est :

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

Fusionner les tableaux

Dans l'exemple suivant, nous utilisons la méthode concat() pour fusionner deux tableaux. La méthode concat() accepte plusieurs paramètres de tableau :

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

Exécutez le code ci-dessus, le résultat de sortie est :

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

Créez un tableau de plages

Dans l'exemple suivant, nous utilisons la méthode range() pour générer un tableau dans la plage. Le dernier paramètre de la méthode range() est la taille du pas, qui est par défaut 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 )
      }
   }
}

exécute le code ci-dessus et le résultat de sortie est :

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

Méthode de tableau Scala

Le tableau montre les méthodes importantes pour traiter les tableaux dans le langage Scala Avant de l'utiliser, nous devons utiliser le package d'importation 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 开始。