Liste Scala

Scala 集合Collections Scala

Les listes Scala sont similaires aux tableaux en ce que tous les éléments ont le même type, mais elles sont également différentes : les listes sont immuables, ce qui signifie qu'une fois qu'une valeur est définie, elle ne peut pas être modifiée, et les listes ont une structure récursive (c'est-à-dire une structure de liste chaînée) alors que les tableaux n'en ont pas.

Le type d'élément T d'une liste peut être écrit sous la forme List[T]. Par exemple, ce qui suit répertorie divers types de listes :

Exemple

// Liste de chaînes
val site: List[String] = List("Example", "Google", "Baidu")

// Liste d'entiers
val nums: List[Int] = List(1, 2, 3, 4)

// Liste vide
val empty: List[Nothing] = List()

// Liste à deux dimensions
val dim: List[List[Int]] =
   Liste(
      Liste(1, 0, 0),
      Liste(0, 1, 0),
      Liste(0, 0, 1)
   )

Les deux unités de base pour construire une liste sont Nil et ::Nilet::

NilIl peut aussi être représenté comme une liste vide.

L'exemple ci-dessus peut être écrit comme suit :

Exemple

// Liste de chaînes
val site = "Example" :: ("Google" :: ("Baidu" :: Nil))

// Liste d'entiers
val nums = 1 :: (2 :: (3 :: (4 :: Nil)))

// Liste vide
val empty = Nil

// Liste à deux dimensions
val dim = (1 :: (0 :: (0 :: Nil))) ::
          (0 :: (1 :: (0 :: Nil))) ::
          (0 :: (0 :: (1 :: Nil))) :: Nil

Opérations de base sur les listes

Les listes Scala ont trois opérations de base :

  • headRenvoie le premier élément de la liste
  • tailRenvoie une liste contenant tous les éléments sauf le premier
  • isEmptyRenvoie true lorsque la liste est vide

Toute opération sur les listes Scala peut être exprimée à l'aide de ces trois opérations de base. Voici des exemples :

Exemple

// Liste de chaînes
object Test {
   def main(args: Array[String]) {
      val site = "Example" :: ("Google" :: ("Baidu" :: Nil))
      val nums = Nil

      println( "Le premier site web est : " + site.head )
      println( "Le dernier site web est : " + site.tail )
      println( "Vérifier si la liste site est vide : " + site.isEmpty )
      println( "Vérifier si nums est vide : " + nums.isEmpty )
   }
}

L'exécution du code ci-dessus produit la sortie suivante :

$ vim Test.scala 
$ scala Test.scala 
第一网站是 : Example
最后一个网站是 : List(Google, Baidu)
查看列表 site 是否为空 : false
查看 nums 是否为空 : true

Concaténation de listes

Vous pouvez utiliser l'opérateur:::::: ou la méthodeList.:::()List.:::() ou la méthodeList.concat()concat pour concaténer deux listes ou plus. Voici des exemples :

Exemple

object Test {
   def main(args: Array[String]) {
      val site1 = "Exemple" :: ("Google" :: ("Baidu" :: Nil))
      val site2 = "Facebook" :: ("Taobao" :: Nil)

      // Utilisation de l'opérateur :::
      var fruit = site1 ::: site2
      println( "site1 ::: site2 : " + fruit )
     
      // Utilisation de la méthode List.:::()
      fruit = site1.:::(site2)
      println( "site1.:::(site2) : " + fruit )

      // Utilisation de la méthode concat
      fruit = List.concat(site1, site2)
      println( "List.concat(site1, site2) : " + fruit  )
     

   }
}

L'exécution du code ci-dessus produit la sortie suivante :

$ vim Test.scala 
$ scala Test.scala 
site1 ::: site2 : List(Example, Google, Baidu, Facebook, Taobao)
site1.:::(site2) : List(Facebook, Taobao, Example, Google, Baidu)
List.concat(site1, site2) : List(Example, Google, Baidu, Facebook, Taobao)

List.fill()

Nous pouvons utiliser la méthode List.fill() pour créer une liste avec un nombre spécifié d'éléments répétés :

Exemple

object Test {
   def main(args: Array[String]) {
      val site = List.fill(3)("Exemple") // Répéter Exemple 3 fois
      println( "site : " + site  )

      val num = List.fill(10)(2)         // Répéter l'élément 2, 10 fois
      println( "num : " + num  )
   }
}

L'exécution du code ci-dessus produit la sortie suivante :

$ vim Test.scala 
$ scala Test.scala 
site : List(Example, Example, Example)
num : List(2, 2, 2, 2, 2, 2, 2, 2, 2, 2)

List.tabulate()

La méthode List.tabulate() crée une liste à l'aide d'une fonction donnée.

Le premier paramètre de la méthode est le nombre d'éléments, qui peut être bidimensionnel ; le second paramètre est la fonction spécifiée. Nous calculons le résultat à l'aide de la fonction spécifiée et insérons la valeur retournée dans la liste, en commençant à 0. Voici quelques exemples :

Exemple

object Test {
   def main(args: Array[String]) {
      // Créer 5 éléments à l'aide de la fonction donnée
      val squares = List.tabulate(6)(n => n * n)
      println( "Unidimensionnel : " + squares  )

      // Créer une liste bidimensionnelle
      val mul = List.tabulate( 4,5 )( _ * _ )      
      println( "Multi-dimensionnel : " + mul  )
   }
}

L'exécution du code ci-dessus produit la sortie suivante :

$ vim Test.scala 
$ scala Test.scala 
一维 : List(0, 1, 4, 9, 16, 25)
多维 : 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))

List.reverse

List.reverse est utilisé pour inverser l'ordre d'une liste. Voici des exemples :

Exemple

object Test {
   def main(args: Array[String]) {
      val site = "Example" :: ("Google" :: ("Baidu" :: Nil))
      println( "Avant l'inversion du site : " + site )

      println( "Après l'inversion du site : " + site.reverse )
   }
}

L'exécution du code ci-dessus produit la sortie suivante :

$ vim Test.scala 
$ scala Test.scala 
site 反转前 : List(Example, Google, Baidu)
site 反转后 : List(Baidu, Google, Example)

Méthodes courantes de List en Scala

Le tableau suivant répertorie les méthodes courantes de List en Scala :

Non. Méthode et description
1

def +:(elem: A): List[A]

Préfixe un élément à la liste

scala> val x = List(1)
x: List[Int] = List(1)

scala> val y = 2 +: x
y: List[Int] = List(2, 1)

scala> println(x)
List(1)
2

def ::(x: A): List[A]

Ajoute un élément au début de la liste

3

def :::(prefix: List[A]): List[A]

Ajoute les éléments de la liste spécifiée au début de la liste

4

def :+(elem: A): List[A]

Copie la liste après l'ajout d'éléments

scala> val a = List(1)
a: List[Int] = List(1)

scala> val b = a :+ 2
b: List[Int] = List(1, 2)

scala> println(a)
List(1)
5

addString(b: StringBuilder): StringBuilder

Ajoute tous les éléments de la liste à un StringBuilder

6

def addString(b: StringBuilder, sep: String): StringBuilder

Ajoute tous les éléments de la liste à un StringBuilder avec un séparateur spécifié

7

def apply(n: Int): A

Obtient un élément par index de liste

8

def contains(elem: Any): Boolean

Vérifie si la liste contient l'élément spécifié

9

def copyToArray(xs: Array[A], start: Int, len: Int): Unit

Copie les éléments de la liste dans un tableau

10

def distinct: List[A]

Supprime les éléments en double de la liste et renvoie une nouvelle liste

11

def drop(n: Int): List[A]

Supprime les n premiers éléments et renvoie une nouvelle liste

12

def dropRight(n: Int): List[A]

Supprime les n derniers éléments et renvoie une nouvelle liste

13

def dropWhile(p: (A) => Boolean): List[A]

Supprime des éléments de gauche à droite jusqu'à ce que la condition p ne soit plus satisfaite

14

def endsWith[B](that: Seq[B]): Boolean

Vérifie si la liste se termine par la séquence spécifiée

15

def equals(that: Any): Boolean

Détermine s'ils sont égaux

16

def exists(p: (A) => Boolean): Boolean

Vérifie si un élément satisfaisant la condition spécifiée existe dans la liste

Vérifie si la liste l contient un certain élément

scala> l.exists(s => s == "Hah")
res7: Boolean = true
17

def filter(p: (A) => Boolean): List[A]

Renvoie tous les éléments qui satisfont à la condition spécifiée

Élimine les éléments dont la longueur est 3

scala> l.filter(s => s.length == 3)
res8: List[String] = List(Hah, WOW)
18

def forall(p: (A) => Boolean): Boolean

Vérifie tous les éléments

Par exemple : vérifie si tous les éléments commencent par "H"

scala> l.forall(s => s.startsWith("H")) res10: Boolean = false
19

def foreach(f: (A) => Unit): Unit

Applique une fonction à tous les éléments de la liste

20

def head: A

Récupère le premier élément de la liste

21

def indexOf(elem: A, from: Int): Int

Trouve la position de la première occurrence d'un élément à partir de la position spécifiée 'from'

22

def init: List[A]

Renvoie tous les éléments sauf le dernier

23

def intersect(that: Seq[A]): List[A]

Calcule l'intersection de plusieurs collections

24

def isEmpty: Boolean

Vérifie si la liste est vide

25

def iterator: Iterator[A]

Crée un nouvel itérateur pour parcourir les éléments

26

def last: A

Renvoie le dernier élément

27

def lastIndexOf(elem: A, end: Int): Int

Trouve la dernière position d'occurrence d'un élément à partir de la position spécifiée 'end'

28

def length: Int

Renvoie la longueur de la liste

29

def map[B](f: (A) => B): List[B]

Recalcule tous les éléments à l'aide de la méthode donnée

30

def max: A

Trouve le plus grand élément

31

def min: A

Trouve le plus petit élément

32

def mkString: String

Affiche tous les éléments de la liste sous forme de chaîne

33

def mkString(sep: String): String

Affiche tous les éléments de la liste sous forme de chaîne à l'aide d'un séparateur

34

def reverse: List[A]

Inverse la liste

35

def sorted[B >: A]: List[A]

Trie la liste

36

def startsWith[B](that: Seq[B], offset: Int): Boolean

Vérifie si la liste contient la séquence spécifiée à la position spécifiée

37

def sum: A

Calcule la somme des éléments de la collection

38

def tail: List[A]

Renvoie tous les éléments sauf le premier

39

def take(n: Int): List[A]

Extrait les n premiers éléments de la liste

40

def takeRight(n: Int): List[A]

Extrait les n derniers éléments de la liste

41

def toArray: Array[A]

Convertit la liste en un tableau

42

def toBuffer[B >: A]: Buffer[B]

Renvoie un tampon contenant tous les éléments de la liste

43

def toMap[T, U]: Map[T, U]

Convertit List en Map

44

def toSeq: Seq[A]

Convertit List en Seq

45

def toSet[B >: A]: Set[B]

Convertit List en Set

46

def toString(): String

Convertit la liste en chaîne

Pour plus de méthodes, veuillez consulter ladocumentation API

Scala 集合Collections Scala

Autres extensions