Scala - Tableaux

Scala fournit une structure de données, le array, qui stocke une collection séquentielle de taille fixe d'éléments du même type. Un tableau est utilisé pour stocker une collection de données, mais il est souvent plus utile de considérer un tableau comme une collection de variables du même type.

Au lieu de déclarer des variables individuelles, telles que nombre0, nombre1, ... et nombre99, vous déclarez une variable de tableau telle que des nombres et utilisez les nombres [0], les nombres [1] et ..., les nombres [99] pour représenter variables individuelles. Ce didacticiel explique comment déclarer des variables de tableau, créer des tableaux et traiter des tableaux à l'aide de variables indexées. L'index du premier élément d'un tableau est le nombre zéro et l'indice du dernier élément est le nombre total d'éléments moins un.

Déclaration des variables de tableau

Pour utiliser un tableau dans un programme, vous devez déclarer une variable pour référencer le tableau et vous devez spécifier le type de tableau auquel la variable peut faire référence.

Voici la syntaxe pour déclarer une variable de tableau.

Syntaxe

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

or

var z = new Array[String](3)

Ici, z est déclaré comme un tableau de chaînes pouvant contenir jusqu'à trois éléments. Les valeurs peuvent être attribuées à des éléments individuels ou accéder à des éléments individuels, cela peut être fait en utilisant des commandes comme les suivantes -

Commander

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

Ici, le dernier exemple montre qu'en général, l'index peut être n'importe quelle expression qui donne un nombre entier. Il existe une autre façon de définir un tableau -

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

L'image suivante représente un tableau myList. Ici,myList contient dix valeurs doubles et les indices vont de 0 à 9.

Traitement des tableaux

Lors du traitement des éléments d'un tableau, nous utilisons souvent des structures de contrôle de boucle car tous les éléments d'un tableau sont du même type et la taille du tableau est connue.

Voici un exemple de programme montrant comment créer, initialiser et traiter des tableaux -

Exemple

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

Enregistrez le programme ci-dessus dans Demo.scala. Les commandes suivantes sont utilisées pour compiler et exécuter ce programme.

Commander

\>scalac Demo.scala
\>scala Demo

Production

1.9
2.9
3.4
3.5
Total is 11.7
Max is 3.5

Scala ne prend pas directement en charge diverses opérations sur les tableaux et fournit diverses méthodes pour traiter les tableaux dans n'importe quelle dimension. Si vous souhaitez utiliser les différentes méthodes, il est nécessaire d'importerArray._ paquet.

Tableaux multidimensionnels

Il existe de nombreuses situations où vous auriez besoin de définir et d'utiliser des tableaux multidimensionnels (c'est-à-dire des tableaux dont les éléments sont des tableaux). Par exemple, les matrices et les tableaux sont des exemples de structures qui peuvent être réalisées sous forme de tableaux bidimensionnels.

Voici un exemple de définition d'un tableau à deux dimensions -

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

Il s'agit d'un tableau qui a trois éléments chacun étant un tableau d'entiers qui a trois éléments.

Essayez l'exemple de programme suivant pour traiter un tableau multidimensionnel -

Exemple

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

Enregistrez le programme ci-dessus dans Demo.scala. Les commandes suivantes sont utilisées pour compiler et exécuter ce programme.

Commander

\>scalac Demo.scala
\>scala Demo

Production

0 1 2
0 1 2
0 1 2

Concaténer les tableaux

Essayez l'exemple suivant qui utilise la méthode concat () pour concaténer deux tableaux. Vous pouvez passer plus d'un tableau comme arguments à la méthode concat ().

Exemple

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

Enregistrez le programme ci-dessus dans Demo.scala. Les commandes suivantes sont utilisées pour compiler et exécuter ce programme.

Commander

\>scalac Demo.scala
\>scala Demo

Production

1.9
2.9
3.4
3.5
8.9
7.9
0.4
1.5

Créer un tableau avec une plage

Utilisation de la méthode range () pour générer un tableau contenant une séquence d'entiers croissants dans une plage donnée. Vous pouvez utiliser l'argument final comme étape pour créer la séquence; si vous n'utilisez pas d'argument final, l'étape sera considérée comme 1.

Prenons un exemple de création d'un tableau de plage (10, 20, 2): cela signifie créer un tableau avec des éléments entre 10 et 20 et une différence de plage 2. Les éléments du tableau sont 10, 12, 14, 16 et 18 .

Autre exemple: range (10, 20). Ici, la différence de plage n'est pas donnée donc par défaut, elle suppose 1 élément. Il crée un tableau avec les éléments compris entre 10 et 20 avec une différence de plage 1. Les éléments du tableau sont 10, 11, 12, 13,… et 19.

L'exemple de programme suivant montre comment créer un tableau avec des plages.

Exemple

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

Enregistrez le programme ci-dessus dans Demo.scala. Les commandes suivantes sont utilisées pour compiler et exécuter ce programme.

Commander

\>scalac Demo.scala
\>scala Demo

Production

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

Méthodes de tableau Scala

Voici les méthodes importantes que vous pouvez utiliser tout en jouant avec un tableau. Comme indiqué ci-dessus, vous devrez importerArray._package avant d'utiliser l'une des méthodes mentionnées. Pour une liste complète des méthodes disponibles, veuillez consulter la documentation officielle de Scala.

Sr. Non Méthodes avec description
1

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

Crée un tableau d'objets T, où T peut être Unit, Double, Float, Long, Int, Char, Short, Byte, Boolean.

2

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

Concatène tous les tableaux en un seul tableau.

3

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

Copiez un tableau dans un autre. Équivalent à System.arraycopy de Java (src, srcPos, dest, destPos, length).

4

def empty[T]: Array[T]

Renvoie un tableau de longueur 0

5

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

Renvoie un tableau contenant des applications répétées d'une fonction à une valeur de départ.

6

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

Renvoie un tableau qui contient les résultats de certains calculs d'éléments un certain nombre de fois.

sept

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

Renvoie un tableau à deux dimensions qui contient les résultats de certains calculs d'éléments un certain nombre de fois.

8

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

Renvoie un tableau contenant des applications répétées d'une fonction à une valeur de départ.

9

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

Crée un tableau avec des dimensions données.

dix

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

Crée un tableau à 2 dimensions

11

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

Crée un tableau en 3 dimensions

12

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

Renvoie un tableau contenant des valeurs également espacées dans un intervalle entier.

13

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

Renvoie un tableau contenant une séquence d'entiers croissants dans une plage.

14

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

Renvoie un tableau contenant les valeurs d'une fonction donnée sur une plage de valeurs entières à partir de 0.

15

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

Renvoie un tableau à deux dimensions contenant les valeurs d'une fonction donnée sur des plages de valeurs entières à partir de 0.