Mis à jour le lundi 30 octobre 2017
  • 20 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

Ce cours existe en livre papier.

Vous pouvez obtenir un certificat de réussite à l'issue de ce cours.

J'ai tout compris !

Les tableaux et les dictionnaires

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Les tableaux sont des moyens simples pour regrouper tout un tas d'informations dans une unique variable. Ils permettent aussi d'éviter la redondance dans le code, notamment en évitant de déclarer de multiples variables. Dans un tableau, vous allez pouvoir stocker un peu de tout, un peu de n'importe quoi, ou l'ordonner par plusieurs valeurs de même type (par exemple stocker dans un tableau les prénoms des joueurs de votre équipe). Vous verrez que l'utilisation de tableaux est une notion bien pratique qui vous permettra de mieux gérer votre programme.

En clair : les tableaux sont des variables spéciales.

Les tableaux numérotés et les dictionnaires

Comme j'aime bien vous confronter à un problème pour expliquer l'intérêt de la nouvelle notion en cours, je vous en pose un nouveau ici. Imaginez que je vous demande de me garder en mémoire (et donc avec des variables) les prénoms des membres de votre famille, comment procéderiez-vous ?

Avec ce que vous avez appris jusqu'à maintenant, la solution naturelle qui survient ne doit pas trop différer de celle-ci :

let prenom1 = "Camille"
let prenom2 = "Maxime"
let prenom3 = "Antoine"
let prenom4 = "Lucie"
let prenom5 = "Mathilde"

Vous avez alors, dans cet exemple, déclaré 5 variables. Pour peu que vous ayez une famille nombreuse, c'est beaucoup plus qu'il en faudrait. Maintenant si je vous dis que vous pouvez mettre tous ces noms dans une et une seule variable, qu'en penseriez-vous ?

let prenoms = ["Camille", "Maxime", "Antoine", "Lucie", "Mathilde"]

Solution beaucoup plus rapide, plus claire et surtout plus propre. Bien sûr, ce n'est pas ici le seul avantage d'un tableau. Avec un tableau, vous allez pouvoir gérer beaucoup plus facilement les prénoms, vous allez pouvoir les trier plus simplement aussi. Je vous laisse poursuivre la lecture, vous vous en rendrez compte tous seuls !

Les tableaux numérotés

Un tableau numéroté est tout simplement l'exemple que je vous ai fourni ci-dessus. Il faut savoir qu'un tableau ne pourra contenir que des données du même type. Vous aurez alors par exemple un tableau avec uniquement desString.

Un tableau numéroté  est un tableau qui permettra de dire : en première position je veux ça, en deuxième position je veux ça, en troisième position je veux ça, etc.

En Swift, on ne parlera pas de position mais d'indice de tableau. Dans ce langage, l'indice d'un tableau commence à 0. C'est-à-dire que la première position est l'indice 0, la deuxième position l'indice 1, etc. 

Déclaration d'un tableau

Voici comment déclarer un tableau :

let tableau = [valeur1, valeur2, ..., valeurN]

valeur1,valeur2, jusqu'à valeurN  sont des valeurs du même type (String,Int,Float, etc.).

  • Déclaration d'un tableau comme pour une variable : mot clévar oulet selon si vous modifiez votre tableau par la suite ou non, suivi du nom du tableau, suivi du signe égal si vous souhaitez affecter directement des valeurs à ce tableau.

  • On ouvre des crochets.

  • Enfin, on y insère – dans ces crochets – les données de même type en les séparants par des virgules.

Il est aussi possible de préciser un type explicite lors de la déclaration de votre tableau. Pour cela, il faut préciser que votre variable sera un tableau et préciser aussi le type que le tableau contiendra.

var tableauEntiers: [Int]

Rien de plus simple ! Ce type permettra de dire que c'est un tableau qui contiendra desInt.

Accéder à un élément du tableau

C'est bien beau tout ça, mais maintenant je fais comment pour accéder à ces valeurs ?

Il va falloir préciser vous-mêmes à quelle valeur vous souhaitez accéder. Et pour cela, vous allez dire : "Je veux accéder à l'élément qui est en indice 2 de ce tableau". Il faudra préciser au tableau la position à laquelle vous souhaitez accéder entre crochets. De ce fait, cet exemple :

let prenoms = ["Camille", "Maxime", "Antoine", "Lucie", "Mathilde"]

print(prenoms[2])

Vous affichera : "Antoine". En effet, on a demandé grâce à print d'afficher le prénom qui se trouve à l'indice 2 du tableau, soit le prénom à la troisième position. Vous pourriez re-construire toutes vos variables, si vous le souhaitez, comme sur le premier exemple. Ce qui nous donnerait :

let prenoms = ["Camille", "Maxime", "Antoine", "Lucie", "Mathilde"]

// Accéder aux éléments du tableau un à un
let prenom1 = prenoms[0]
let prenom2 = prenoms[1]
let prenom3 = prenoms[2]
let prenom4 = prenoms[3]
let prenom5 = prenoms[4]
Ajouter et modifier les valeurs d'un tableau

Pour ajouter une nouvelle valeur à votre tableau par la suite, nous allons utiliser la concaténation. Comme pour la concaténation il faut obligatoirement que les deux éléments à concaténer soient du même type, voici comment ajouter une valeur à un tableau :

var prenoms = ["Chloé", "Damien", "Antoine", "Lucie", "Mathilde"]

// On ajoute en fin de tableau
prenoms = prenoms + ["Jean"]
print(prenoms)

// Ou bien encore en début du tableau
prenoms = ["Jean"] + prenoms
print(prenoms)

// Petite astuce pour concaténer plus rapidemment
// en fin de tableau
prenoms += ["Jean"]

Pour modifier la valeur d'un élément du tableau, on procédera comme pour une variable. Si on veut que la valeur à l'indice 0 du tableau change, alors on fera comme ceci :

prenoms[0] = "Rudy"

Les dictionnaires

Les dictionnaires ressemblent grandement aux tableaux ci-dessus, à la différence qu'ils ne seront plus numérotés automatiquement. Jusqu'alors, vous n'aviez pas à vous soucier de numéroter chaque valeur (les indices). Pour les dictionnaires, vous êtes obligé de le faire manuellement. Et la puissance d'un dictionnaire réside dans le fait que vous ne serez pas forcément obligé de numéroter. J'entends par là que vous pourrez mettre à la place desDouble ou encore desString

Contrairement aux éléments d'un tableau, les valeurs ne se rangeront donc plus dans un ordre spécifique (de 0 à n pour les indices du tableau).

Vous utilisez un dictionnaire lorsque vous avez besoin de rechercher une valeur en fonction d'une certaine autre valeur. Un peu comme dans un dictionnaire classique en fait. Vous voulez connaître la définition d'un mot : vous recherchez le mot et vous y trouverez sa définition.

Déclarer un dictionnaire

Du coup, pour déclarer ce deuxième type de tableau, on va devoir préciser avant chaque valeur à quoi elle correspond. Essayons pour exemple de créer une petite fiche d'identité d'une personne. Voici ce que l'on pourrait avoir :

let personne = ["Nom": "Durand", "Prénom": "Maxime", "Adresse": "94 rue machin", "Ville": "Lille"]

Pour les dictionnaires on ne parlera plus d'indice mais de clé. Et à une clé, on associe une valeur. Chaque clé de votre dictionnaire doit être du même type. De même, chaque valeur doit être du même type. En revanche, le type des clés peut être différent du type des valeurs. 

Pour préciser le type explicite d'un dictionnaire, on procédera de cette façon :

var dictionnaire: [type1: type2] // type1 peut être identique à type2

// Par exemple
var dictionnaire: [String: Int]

dictionnaire sera donc dans cet exemple un tableau qui aura des clés de typeString et des valeurs de typeInt.

Un dictionnaire se construit donc ainsi :

  • On ouvre un crochet.

  • On écrit la clé et on ajoute à la fin un deux-points :. Ce deux-points permettra de séparer la clé de sa valeur associé. On pourrait donc traduire le deux-points par "est associée à".

  • On écrit la valeur pour cette clé.

  • La clé et sa valeur forment une association. Vous pouvez ajouter autant d'associations que vous le souhaitez en les séparant par des virgules.

  • Enfin, on n'oublie pas de fermer le crochet.

Accéder à la valeur d'un dictionnaire

Pour accéder à la valeur d'un dictionnaire, la méthode est la même que pour celle d'un tableau. Sauf que cette fois-ci, ce ne sont plus les indices du tableau que vous allez indiquer, mais les clés du dictionnaire. 

let nom = personne["Nom"]
Ajouter et modifier la valeur d'un dictionnaire

Pour ajouter une valeur à un dictionnaire existant, on va cette fois-ci réaliser une affectation avec une nouvelle clé.

var personne = ["Nom": "Durand", "Prénom": "Maxime", "Adresse": "94 rue machin", "Ville": "Lille"]
personne["Commentaire"] = "Personne super cool !"

print(personne)

Et enfin, pour modifier, pareil que pour un tableau : on précise la clé à laquelle on veut modifier la valeur.

var personne = ["Nom": "Durand", "Prénom": "Maxime", "Adresse": "94 rue machin", "Ville": "Lille"]
personne["Adresse"] = "12 rue bidule"

print(personne)

Parcourir un tableau ou un dictionnaire

Les tableaux, c'est bien pratique, mais vous serez amenés à les parcourir par la suite, histoire de savoir ce qu'ils contiennent.

Il y a plusieurs approches différentes pour parcourir un tableau, nous allons les voir tout de suite.

Première approche : la boucle for-in numéroté

Eh oui, avec la bouclefor-in que nous avons vu dans le chapitre précédent, vous pourrez accéder à toutes les valeurs de votre tableau. La seule contrainte ici est de savoir combien de valeurs votre tableau contient. De ce fait, vous pourrez alors réaliser une boucle partant de 0 et qui s'incrémente jusqu'au nombre de valeurs.

let prenoms = ["Camille", "Maxime", "Antoine", "Lucie", "Mathilde"]
var i: Int

print("Les membres de la famille sont :")
for i in 0..<5 { // N'oubliez pas que l'indice d'un tableau débute à 0
    print("- " + prenoms[i])
}

Au fur et à mesure que l'on parcourt la boucle,i change de valeur. Sachant quei est mis entre crochets pour le tableauprenoms, alors il servira ici à indiquer l'indice du tableau auquel on souhaite accéder.

Cette boucle est bien dès l'instant qu'on sait exactement de combien de valeurs le tableau dispose. Si par la suite vous voulez ajouter une valeur au tableau, vous allez devoir modifier la valeur dans la bouclefor. Ce que je veux dire par là, ce n'est que c'est pas automatique. C'est pourquoi je vais vous présenter une deuxième approche.

Deuxième approche : la boucle for-in non numéroté

Parcourir un tableau

Vous pourriez imaginer comment parcourir notre tableauprenoms. Chaque valeur du tableau est un prénom, on va donc vouloir à chaque tour de boucle mettre le prénom dans une variable que l'on va appelerprenom (au singulier maintenant).

let prenoms = ["Camille", "Maxime", "Antoine", "Lucie", "Mathilde"]

for prenom in prenoms {
    print(prenom)
}

prenom va prendre tour à tour les valeurs du tableauprenoms. Et une bonne chose qu'on peut constater, c'est qu'il n'y a nul besoin ici de préciser le nombre de valeurs du tableau. Lefor-in saura de lui-même quand s'arrêter.

Parcourir un dictionnaire

Le dictionnaire a la particularité de disposer d'une clé. Pour réaliser une bouclefor-in, il faudra aussi prendre en compte la clé.

let personne = ["Nom": "Durand", "Prénom": "Maxime", "Adresse": "94 rue machin", "Ville": "Lille"]

for (cle, valeur) in personne {
    print(cle + " - " + valeur)
}

Vous avez par cette méthode réussi à récupérer la valeur de votre dictionnaire, mais aussi sa clé. Pour cela, indiquez entre parenthèses le nom de la variable dans laquelle vous souhaitez mettre le contenu de la clé, virgule le nom de la variable dans laquelle vous souhaitez mettre la valeur associée à cette clé.

Le fonctionnement de la boucle restera identique à celle d'un tableau.

Rechercher dans un tableau

Pas de nouvelles notions dans cette section. En revanche, je vais vous faire pratiquer sur un petit exercice. Dans cet exercice, vous allez pouvoir utiliser pas mal de notions vues au cours de ces derniers chapitres.

Je vais vous demander de réaliser une recherche dans un tableau. Voici les étapes à réaliser :

  • On précise un tableau avec des valeurs.

  • On propose une valeur à rechercher dans le tableau.

  • On vérifie si la valeur est dans le tableau ou non.

  • On indique le résultat de la recherche.

Il peut y avoir plusieurs méthodes pour réaliser cet exercice, voici comment je vois la réalisation de celui-ci :

  • 2 constantes : la première étant le mot à rechercher dans le tableau, la deuxième le tableau avec des valeurs que vous lui affecterez.

  • 1 variable : un booléen permettant de dire si oui ou non le mot a été trouvé dans le tableau.

  • Une boucle pour parcourir les valeurs avec, pour contenu, une condition qui vérifie si la valeur en cours du tableau correspond bien à celle du mot à rechercher. Si la condition est vérifiée, alors on indique le booléen à true qui permettra de dire que l'on a trouvé le mot dans le tableau.

  • On affiche le résultat de la recherche selon ce que dit notre booléen.

C'est pas bien compliqué, et je vous propose de ne pas lire tout de suite la correction et d'essayer de réaliser cet exercice vous-mêmes. Vous allez pouvoir pratiquer et réfléchir, et c'est avec la pratique que l'on apprend et comprend le mieux. Si vous avez tout bien compris jusqu'ici, il y en a pour grand maximum 5 minutes. Surtout que je vous ai déjà fourni une très bonne piste, il n'y qu'à traduire les points ci-dessus en Swift et c'est bouclé. Allez, au boulot ! On se retrouve dans 5 minutes juste en dessous pour découvrir ma solution. :)

Correction

Voici ma solution, il se peut que vous ayez trouvé une autre solution qui fonctionne tout autant. Ma méthode n'est pas forcément la meilleure. ;)

let mots: [String] = ["bateau", "voiture", "vélo", "avion", "bus", "train", "moto"]

/* 
Cette valeur servira juste pour faire la recherche,
elle n'est donc pas destiné à changer :
j'utilise le mot-clé "let"
*/
let motARechercher: String = "avion" // Faites varier cette valeur pour tester la recherche

// Indiquera si le mot a été trouvé ou non
// Par défaut, on le met à false car on n'a pas encore commencé la recherche
var motTrouve: Bool = false

for mot in mots {
    if mot == motARechercher {
        motTrouve = true
    }
}

if motTrouve {
    print("Le mot a bien été trouvé dans ce tableau.")
} else {
    print("Le mot n'est pas dans ce tableau.")
}

Voilà. N'hésitez pas à faire varier le mot dans la constantemotARechercher pour vérifier que cette méthode marche correctement et que ça affiche ce que vous désirez. 

Je présente cette solution non pas pour que vous en fassiez un copier-coller, mais pour que vous vous en serviez comme modèle histoire de savoir si vous étiez bien parti dans ce que vous aviez fait. Ou alors si vous étiez bloqué, que cela puisse vous débloquer. Mais ne changez pas votre façon de faire !

Ici, par exemple, on aurait pu ne pas définir de constante et écrire le mot en dur dans la condition directement, on aurait pu utiliser une bouclefor-in ouwhile avec condition pour parcourir le tableau, on aurait pu se passer de booléen et simplement afficher dès que la valeur a été trouvée, etc.

Pour résumer

  • Les tableaux sont des variables qui contiennent plusieurs données du même type numérotées (indices).

  • L'indice d'un tableau commence toujours à 0.

  • Les dictionnaires sont des variables permettant d'associer un élément à un autre. À une clé on associe une valeur : les clés doivent être du même type et les valeurs aussi, mais une clé peut être du même type qu'une valeur.

  • La déclaration d'un tableau se fait grâce aux crochets et on sépare les valeurs par des virgules.

  • Les bouclesfor-in sont très utiles pour parcourir les valeurs d'un tableau ou d'un dictionnaire.

 

Exemple de certificat de réussite
Exemple de certificat de réussite