Les Maps en Dart (POO)
Les Maps en Dart (POO)
Sommaire
- 1- Objectifs
- 2- Présentation
- 3- Déclaration et Initialisation
- 4- Opérations sur les Maps
- 4.1- Accès à une valeur
- 4.2- Ajout ou modification d'une valeur
- 4.3- Suppression d'une entrée
- 4.4- Parcours d'une Map
- 4.5- Vérification d'une clé ou d'une valeur
- 4.6- Obtenir les clés et les valeurs
- 4.7- Vider complètement une Map
- 4.8- Activité 01
- 4.9- Activité02
- 5- Map dans une classe (POO)
- 6- Méthodes utiles avec les Maps
- 7- Map imbriquée
- 7.1.1- Cours Dart
Objectifs
- Comprendre le concept des Maps en Dart
- Utiliser les Maps pour gérer des paires clé-valeur
- Manipuler des Maps dans un contexte orienté objet
-
Présentation
- Une Map est une collection clé-valeur : chaque clé est unique et permet d’accéder à une valeur.
- Les Maps sont largement utilisées pour organiser et accéder à des données rapidement.
- En Dart, une Map est définie avec la syntaxe :
Map<TypeClé, TypeValeur>
. -
Déclaration et Initialisation
- Déclaration littérale :
- Avec constructeur :
-
Opérations sur les Maps
- Accès à une valeur :
map['clé']
- Ajout/modification :
map['clé'] = valeur;
- Suppression :
map.remove('clé');
- Parcours :
-
Accès à une valeur
- Utilisez la clé entre crochets pour obtenir la valeur correspondante.
-
Ajout ou modification d’une valeur
- Si la clé n’existe pas, elle est ajoutée.
- Si elle existe déjà, la valeur est modifiée.
-
Suppression d’une entrée
- Supprime l’entrée correspondant à la clé
'âge'
. -
Parcours d’une Map
- Parcours avec
forEach
: - Parcours avec une boucle
for-in
: -
Vérification d’une clé ou d’une valeur
containsKey
: vérifie si une clé existecontainsValue
: vérifie si une valeur est présente-
Obtenir les clés et les valeurs
-
Vider complètement une Map
- Supprime toutes les paires clé/valeur de la Map.
-
Activité 01
- Crée un fichier Dart nommé map_operations.dart. Tu vas créer et manipuler une Map représentant un étudiant.
- Déclare une Map nommée etudiant contenant les informations suivantes :
- Affiche le nom de l’étudiant.
- Ajoute une nouvelle clé note avec la valeur 16.5.
- Modifie la spécialité en ‘Cybersécurité’.
- Supprime l’âge de la Map.
- Affiche tous les éléments de la Map en utilisant une boucle forEach.
- Teste si la clé note existe. Si oui, affiche : « Note trouvée ».
- Vide complètement la Map.
-
Activité02
- Crée une Map<String, Map<String, dynamic>> nommée classe contenant 3 étudiants avec les données suivantes :
- Affiche les informations complètes de chaque étudiant à l’aide d’une boucle forEach.
- Calcule et affiche la moyenne des notes de chaque étudiant.
- Ajoute un nouvel étudiant Salma à la Map.
- Modifie la spécialité de Ali en Cybersécurité.
- Supprime l’étudiant Omar de la classe.
- Affiche uniquement les étudiants qui ont une moyenne supérieure à 16.
- Vide complètement la Map.
-
Map dans une classe (POO)
- Exemple d’utilisation orientée objet :
-
Méthodes utiles avec les Maps
.containsKey()
: vérifie la présence d’une clé.keys
et.values
: accède aux clés ou valeurs.clear()
: vide la Map.update()
et.putIfAbsent()
pour modifier ou insérer-
Map imbriquée
- Exemple :
- Accès :
Map<String, int> notes = {
'Ali': 14,
'Sami': 16,
'Maya': 18
};
Map<String, double> prix = Map();
prix['Stylo'] = 1.5;
prix['Livre'] = 8.0;
notes.forEach((nom, note) {
print('$nom a obtenu $note');
});
print(personne['nom']); // Résultat : Ahmed
personne['profession'] = 'Développeur';
personne['ville'] = 'Sfax';
personne.remove('âge');
personne.forEach((cle, valeur) {
print("$cle : $valeur");
});
for (var cle in personne.keys) {
print("$cle → ${personne[cle]}");
}
print(personne.containsKey('nom')); // true
print(personne.containsValue('Sfax')); // true
print(personne.keys); // (nom, ville, profession)
print(personne.values); // (Ahmed, Sfax, Développeur)
personne.clear();
-
nom : ‘Ali’
age : 21
specialite : ‘Informatique’
Solution
void main() {
// 1. Déclaration de la Map
Map<String, dynamic> etudiant = {
'nom': 'Ali',
'age': 21,
'specialite': 'Informatique'
};
// 2. Afficher le nom de l'étudiant
print('Nom : ${etudiant['nom']}');
// 3. Ajouter une nouvelle clé 'note' avec la valeur 16.5
etudiant['note'] = 16.5;
// 4. Modifier la spécialité en 'Cybersécurité'
etudiant['specialite'] = 'Cybersécurité';
// 5. Supprimer l’âge de la Map
etudiant.remove('age');
// 6. Afficher tous les éléments de la Map avec une boucle forEach
print('Contenu de la Map :');
etudiant.forEach((cle, valeur) {
print('$cle : $valeur');
});
// 7. Tester si la clé 'note' existe
if (etudiant.containsKey('note')) {
print('Note trouvée');
}
// 8. Vider complètement la Map
etudiant.clear();
// Afficher la Map vide
print(etudiant); // {}
}
-
// Exemple de structure d’un étudiant dans la Map :
‘nom’: ‘Ali’,
‘age’: 21,
‘specialite’: ‘Informatique’,
‘notes’: [15.0, 16.5, 17.0]
Solution
void main() {
// Étape 1 : Créer la Map classe avec 3 étudiants
Map<String, Map>String, dynamic>> classe = {
'Ali': {
'age': 21,
'specialite': 'Informatique',
'notes': [15.0, 16.5, 17.0]
},
'Omar': {
'age': 22,
'specialite': 'Mathématiques',
'notes': [13.5, 14.0, 12.5]
},
'Sami': {
'age': 20,
'specialite': 'Physique',
'notes': [17.5, 18.0, 19.0]
}
};
// Étape 2 : Afficher toutes les informations
print('Informations des étudiants :');
classe.forEach((nom, infos) {
print('Nom : $nom');
infos.forEach((cle, valeur) {
print(' $cle : $valeur');
});
});
// Étape 3 : Calculer et afficher les moyennes
print('\nMoyennes :');
classe.forEach((nom, infos) {
List<double> notes = List<double>.from(infos['notes']);
double moyenne = notes.reduce((a, b) => a + b) / notes.length;
print('$nom : $moyenne');
});
// Étape 4 : Ajouter un nouvel étudiant
classe['Salma'] = {
'age': 23,
'specialite': 'Informatique',
'notes': [16.0, 17.0, 15.5]
};
// Étape 5 : Modifier la spécialité de Ali
classe['Ali']?['specialite'] = 'Cybersécurité';
// Étape 6 : Supprimer l’étudiant Omar
classe.remove('Omar');
// Étape 7 : Afficher les étudiants avec moyenne > 16
print('\nÉtudiants avec moyenne > 16 :');
classe.forEach((nom, infos) {
List notes = List<double>.from(infos['notes']);
double moyenne = notes.reduce((a, b) => a + b) / notes.length;
if (moyenne > 16) {
print('$nom avec une moyenne de $moyenne');
}
});
// Étape 8 : Vider la classe
classe.clear();
print('\nClasse après suppression : $classe');
}
class Etudiant {
String nom;
Map<String, double> notes = {};
Etudiant(this.nom);
void ajouterNote(String matiere, double note) {
notes[matiere] = note;
}
double moyenne() {
double total = notes.values.reduce((a, b) => a + b);
return total / notes.length;
}
void afficherNotes() {
print('Notes de $nom :');
notes.forEach((matiere, note) {
print('- $matiere : $note');
});
}
}
void main() {
var e = Etudiant('Amine');
e.ajouterNote('Math', 15);
e.ajouterNote('Physique', 14);
e.afficherNotes();
print('Moyenne : ${e.moyenne()}');
}
Map<String, Map<String, double>> bulletin = {
'Ali': {'Math': 14, 'SVT': 16},
'Maya': {'Math': 18, 'SVT': 15}
};
print(bulletin['Ali']?['Math']); // Affiche 14