Liste 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
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
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
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
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
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
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
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
Autres extensions
Collections Scala