Swift-4-

Type Collection: Array
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