Collections Scala - Liste

Les listes Scala sont assez similaires aux tableaux, ce qui signifie que tous les éléments d'une liste ont le même type mais il existe deux différences importantes. Premièrement, les listes sont immuables, ce qui signifie que les éléments d'une liste ne peuvent pas être modifiés par affectation. Deuxièmement, les listes représentent une liste chaînée tandis que les tableaux sont plats.

Le type d'une liste contenant des éléments de type T s'écrit List[T].

Essayez l'exemple suivant, voici quelques listes définies pour différents types de données.

// List of Strings
val fruit: List[String] = List("apples", "oranges", "pears")
// List of Integers
val nums: List[Int] = List(1, 2, 3, 4)
// Empty List.
val empty: List[Nothing] = List()
// Two dimensional list
val dim: List[List[Int]] = List(
   List(1, 0, 0),
   List(0, 1, 0),
   List(0, 0, 1)
)

Toutes les listes peuvent être définies à l'aide de deux blocs de construction fondamentaux, une queue Nil et ::, qui se prononce cons. Nil représente également la liste vide. Toutes les listes ci-dessus peuvent être définies comme suit.

// List of Strings
val fruit = "apples" :: ("oranges" :: ("pears" :: Nil))
// List of Integers
val nums = 1 :: (2 :: (3 :: (4 :: Nil)))
// Empty List.
val empty = Nil
// Two dimensional list
val dim = (1 :: (0 :: (0 :: Nil))) ::
   (0 :: (1 :: (0 :: Nil))) ::
   (0 :: (0 :: (1 :: Nil))) :: Nil

Opérations de base sur les listes

Toutes les opérations sur les listes peuvent être exprimées selon les trois méthodes suivantes.

Sr. Non Méthodes et description
1

head

Cette méthode renvoie le premier élément d'une liste.

2

tail

Cette méthode retourne une liste composée de tous les éléments sauf le premier.

3

isEmpty

Cette méthode renvoie true si la liste est vide, sinon false.

L'exemple suivant montre comment utiliser les méthodes ci-dessus.

Exemple

object Demo {
   def main(args: Array[String]) {
      val fruit = "apples" :: ("oranges" :: ("pears" :: Nil))
      val nums = Nil
      println( "Head of fruit : " + fruit.head )
      println( "Tail of fruit : " + fruit.tail )
      println( "Check if fruit is empty : " + fruit.isEmpty )
      println( "Check if nums is empty : " + nums.isEmpty )
   }
}

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

Head of fruit : apples
Tail of fruit : List(oranges, pears)
Check if fruit is empty : false
Check if nums is empty : true

Concaténation de listes

Vous pouvez utiliser soit ::: opérateur ou List.:::() méthode ou List.concat()méthode pour ajouter deux ou plusieurs listes. Veuillez trouver l'exemple suivant ci-dessous -

Exemple

object Demo {
   def main(args: Array[String]) {
      val fruit1 = "apples" :: ("oranges" :: ("pears" :: Nil))
      val fruit2 = "mangoes" :: ("banana" :: Nil)
      // use two or more lists with ::: operator
      var fruit = fruit1 ::: fruit2
      println( "fruit1 ::: fruit2 : " + fruit )
      // use two lists with Set.:::() method
      fruit = fruit1.:::(fruit2)
      println( "fruit1.:::(fruit2) : " + fruit )
      // pass two or more lists as arguments
      fruit = List.concat(fruit1, fruit2)
      println( "List.concat(fruit1, fruit2) : " + fruit  )
   }
}

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

fruit1 ::: fruit2 : List(apples, oranges, pears, mangoes, banana)
fruit1.:::(fruit2) : List(mangoes, banana, apples, oranges, pears)
List.concat(fruit1, fruit2) : List(apples, oranges, pears, mangoes, banana)

Création de listes uniformes

Vous pouvez utiliser List.fill()crée une liste composée de zéro ou plusieurs copies du même élément. Essayez l'exemple de programme suivant.

Exemple

object Demo {
   def main(args: Array[String]) {
      val fruit = List.fill(3)("apples") // Repeats apples three times.
      println( "fruit : " + fruit  )
      val num = List.fill(10)(2)         // Repeats 2, 10 times.
      println( "num : " + num  )
   }
}

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

fruit : List(apples, apples, apples)
num : List(2, 2, 2, 2, 2, 2, 2, 2, 2, 2)

Tabulation d'une fonction

Vous pouvez utiliser une fonction avec List.tabulate()méthode à appliquer sur tous les éléments de la liste avant de tabuler la liste. Ses arguments sont comme ceux de List.fill: le premier argument list donne les dimensions de la liste à créer, et le second décrit les éléments de la liste. La seule différence est qu'au lieu que les éléments soient fixes, ils sont calculés à partir d'une fonction.

Essayez l'exemple de programme suivant.

Exemple

object Demo {
   def main(args: Array[String]) {
      // Creates 5 elements using the given function.
      val squares = List.tabulate(6)(n => n * n)
      println( "squares : " + squares  )
      val mul = List.tabulate( 4,5 )( _ * _ )      
      println( "mul : " + mul  )
   }
}

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

squares : List(0, 1, 4, 9, 16, 25)
mul : List(List(0, 0, 0, 0, 0), List(0, 1, 2, 3, 4), 
   List(0, 2, 4, 6, 8), List(0, 3, 6, 9, 12))

Ordre inverse de la liste

Vous pouvez utiliser List.reverseméthode pour inverser tous les éléments de la liste. L'exemple suivant montre l'utilisation.

Exemple

object Demo {
   def main(args: Array[String]) {
      val fruit = "apples" :: ("oranges" :: ("pears" :: Nil))
      println( "Before reverse fruit : " + fruit )
      println( "After reverse fruit : " + fruit.reverse )
   }
}

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

Before reverse fruit : List(apples, oranges, pears)
After reverse fruit : List(pears, oranges, apples)