Introduction
La structure de données dans laquelle on groupe des éléments de même type se nomme, comme dans la plupart des langages de programmation « Array ». Cette collection de données est considérée comme une file séquentielle ou un vecteur suivant le terminologie définie dans la partie l’article « Structures de données« . Un Array ou Vecteur permet donc de décrire des algorithmes de parcours séquentiel ou indexé. On rappelle que tous les éléments d’une collection de type Array doivent être de même type.
Création d’un vecteur modifiable
Afin de pouvoir modifier un Array il faut le déclarer et/ou l’initialiser avec le mot clé var. Dans la documentation de Swift il se nome « mutable array ».
var villes = ["Portland","San Francisco","Cupertino"]
La variable villes est déclarée implicitement comme un Array grâce à la notion d’ inference puis initialisée avec 3 valeur de type String . On dit que le vacteur villes est de type String.
Lors de la déclaration on peut ranger dans un Array des valeurs de la plupart des types définis dans le langage.
Création d’un vecteur non modifiable
Un array non modifiable est créé grâce au mot let.
let villes = ["Portland","San Francisco","Cupertino"]
La variable villes représente un Array de type String immutable. Sa taille et ses valeurs ne peuvent donc pas être changés
Initialisation d’un vecteur avec plusieurs valeurs identiques
Dans le cas ou l’on veut initialiser une collection avec la même valeur un certain nombre de fois on écrira:
var monSacDeSixPommes = Array(count: 6, repeatedValue: "Pomme")
Création d’un vecteur vide
Création d’un vecteur de String vide. On doit absolument déclarer le type des valeurs que le vecteur contientra.
var villes =[String]() // vecteur vide de String mutable let nombre = [Int]() // vecteur vide de nombres entiers immutable
On peut également déclarer un vecteur vide de la façon suivante
let vecteurVide: [Int] = [] // Vecteur vide de nombres immutable
Création d’un vecteur en spécifiant le type des valeurs
var villes : [String] = ["Portland","San Francisco","Cupertino"] var nombres : [Int] = [10,20,30]
Création d’un vecteur en spécifiant le type Array
let villes : Array = ["Portland","San Francisco","Cupertino"]
Concaténation de vecteurs
Pour ajouter un Vecteur à une autre Vecteur, on utilise l’opérateur += ou l’opérateur +
var villes: [String] = ["Portland","San Francisco","Cupertino","Seattle"] villes += ["Vancouver", "Los Angeles"] var plusDeVilles = ["Toulouse", "Perpignan"] mesVilles = villes + plusDeVilles
Accés indexé aux valeurs d’un vecteur
Pour accéder à un élément d’une collection on utilise un index ( nombre entier positif ) entre crochet. Le premier élémentt a pour index le nombre 0
var element = maCollectionDeNombreEntiers[0] // premier élément element = maCollectionDeNombreEntiers[2] + maCollectionDeNombreEntiers[1] print(maCollectionDeNombreEntiers[3]) // Quatrième élément
Si l’on accède un element dont l’index est supérieur à la taille max de la collection, on obtient une erreur lors de l’exécution « fatal error: Array index out of range » et non pas signalé lors de la compilation.
print(maCollectionDeNombreEntiers[10]) // erreur: "fatal error: Array index out of range"
Opérations sur les vecteurs
Pour faciliter le manipulation des collections de type Array et de leurs valeurs, il existe une ensemble de fonctions et propriètés attachés à un Array. Il en existe un grand nombre que nous ne pouvons pas présenter ici. Une manière simple d’en faire la liste et d’utiliser l’aide fournie lors du développement de code avec Xcode. En ajoutant un point au nom d’une variable de type array, une liste de toutes les fonctions et propriétés s’affiche dans une fenêtre
Lors du développement de programme Swift à l’aide de l’atelier logiciel Xcode pourra utiliser un ensemble de fonctions attachées à un Array offrant des opérations visant à en faciliter l’usage. Par exemple:
- count : Pour compter le nombre d’éléments
- reverse: renverser l’ordre des éléménts
- first: accès au premier élément
- last: accès au dernier élément
- append: Concaténation d’un ou plusieurs éléments
Insertion d'un élément Pour insérer un element à une position on utilise la fonction .insert(atindex) maCave = [String]() maCave.insert("Medoc 67", atIndex:3) maCave[4] = "Chiroubles" // Utilisation d'un index Ajouter un element Pour ajouter un element on peut utiliser soit la propriété .append ou tout simplement l'opérateur += let maCollectionDeNombreEntiers = [Int]() maCollectionDeNombreEntiers.append(78) // Utilisation de la méthode append maCollectionDeNombreEntiers += 78 // Utilisation de l'opérateur += Modifier un ensemble d'éléments var années = [1999, 2000, 2001, 2015, 2017] On veut remplacer les 3 éléments d'index 0, 1 et 2 par 2 éléments. année[0...2] = [2002, 2005] le résultat est: [2002, 2005, 2015, 2017] Calculer la taille d'un vecteur var taille = maCave.count Pour accéder au dernier élément on peut écrire l'instruction suivante var dernierElement = maCave[maCave.count - 1 Obtenir le Premier et le dernier élément d'un vecteur var premier = maCave.first var dernier = maCave.last Autre manière pour obtenir le même résultat premier = maCave[0] dernier = maCave[maCave.count - 1] Savoir si un vecteur est vide La fonction isEmpty renvoie une valeur booléenne true si le vecteur est vide print(villes.isEmpty) Savoir si un élément appartient au vecteur La fonction renvoie la valeur booléenne si l'élément existe print(villes.contains("Moscou")) print(villes.contains("Paris")) Trier un vecteur var animals = ["zebre", "chien", "vache", "alligator"] le tri est réaliser sur le même vecteur animals.sortInPlace() le tri est réalisé par création d'un nouveau vecteur let animals2 = animals.sort()
Jouons avec le mot clé: typealias
L’alias de types: typealias signifie l’on peut renommer un type existant du langage Swift avec le nom de son choix. Cela permet d’utiliser un type personnalisé afin de rendre un type plus adapté au code à développer.
typealias Entier = Int typealias VecteurEntier = Array<Entier> typealias Vecteur = [Entier] // notation courte var vecteur = VecteurEntier() // vecteur vide de type vecteur de nombre entier vecteur = [10,20] // Initialisation avec 2 valeurs var vectEntier = Vecteur() // vectEntier de type vecteur de nombres entier vectEntier = [30,40] // Initialisation