Module Dart.6 – Collections
Objectif
Maîtriser toutes les collections Dart : List, Map, Set et leurs méthodes pour manipuler efficacement les données.
Théorie
List
Liste ordonnée d'éléments, peut contenir des doublons.
Création
// Littéral
List<int> nombres = [10, 20, 30];
List<String> noms = ['Jean', 'Marie', 'Pierre'];
List<dynamic> mixte = [1, 'texte', true];
// Constructeur
List<int> vide = [];
List<int> avecTaille = List.filled(5, 0); // [0, 0, 0, 0, 0]
List<int> generate = List.generate(5, (i) => i * 2); // [0, 2, 4, 6, 8]
Accès et modification
List<int> nombres = [10, 20, 30];
nombres[0]; // 10 (premier élément, index 0)
nombres[1] = 25; // Modifie le deuxième élément
nombres.length; // 3
nombres.first; // 10
nombres.last; // 30
Ajout et suppression
List<int> nombres = [10, 20];
nombres.add(30); // Ajoute à la fin : [10, 20, 30]
nombres.addAll([40, 50]); // Ajoute plusieurs : [10, 20, 30, 40, 50]
nombres.insert(0, 5); // Insère à l'index 0 : [5, 10, 20, ...]
nombres.remove(20); // Retire la première occurrence de 20
nombres.removeAt(0); // Retire l'élément à l'index 0
nombres.removeLast(); // Retire le dernier
nombres.clear(); // Vide la liste
Méthodes de transformation
map : Transforme chaque élément
var doubles = nombres.map((n) => n * 2).toList();
where : Filtre les éléments
var pairs = nombres.where((n) => n % 2 == 0).toList();
forEach : Exécute une fonction pour chaque élément
nombres.forEach((n) => print(n));
reduce / fold : Réduit à une valeur
var somme = nombres.reduce((a, b) => a + b);
var produit = nombres.fold(1, (acc, n) => acc * n);
Méthodes de recherche
nombres.contains(20); // true
nombres.indexOf(20); // 1 (première occurrence)
nombres.lastIndexOf(20); // Dernière occurrence
nombres.firstWhere((n) => n > 15); // Premier élément > 15
nombres.any((n) => n > 25); // true si au moins un > 25
nombres.every((n) => n > 0); // true si tous > 0
Tri et manipulation
nombres.sort(); // Trie en place
nombres.reversed.toList(); // Inverse (nouvelle liste)
nombres.shuffle(); // Mélange
nombres.sublist(1, 3); // Sous-liste [1, 3[
Map
Structure clé-valeur pour stocker des paires.
Création
// Littéral
Map<String, int> ages = {
'Jean': 30,
'Marie': 25,
'Pierre': 35
};
// Constructeur
Map<String, int> vide = {};
Map<String, int> autre = Map();
Accès et modification
ages['Jean']; // 30
ages['Inexistant']; // null
ages['Nouveau'] = 28; // Ajoute ou modifie
ages.remove('Jean'); // Retire la paire
ages.clear(); // Vide
ages.length; // Nombre de paires
Vérifications
ages.containsKey('Jean'); // true
ages.containsValue(30); // true
ages.isEmpty; // false
ages.isNotEmpty; // true
Parcourir
// Par clés
for (String nom in ages.keys) {
print('$nom: ${ages[nom]}');
}
// Par valeurs
for (int age in ages.values) {
print(age);
}
// Par paires
for (var entry in ages.entries) {
print('${entry.key}: ${entry.value}');
}
// forEach
ages.forEach((nom, age) {
print('$nom: $age');
});
Set
Collection de valeurs uniques (pas de doublons).
Création
// Littéral
Set<String> noms = {'Jean', 'Marie', 'Pierre'};
Set<int> nombres = {1, 2, 3, 3, 4}; // {1, 2, 3, 4} (doublons retirés)
// Constructeur
Set<String> vide = {};
Set<int> autre = Set();
Utilisation
Set<String> noms = {'Jean', 'Marie'};
noms.add('Pierre'); // Ajoute
noms.add('Jean'); // Ignoré (déjà présent)
noms.remove('Jean'); // Retire
noms.contains('Marie'); // true
noms.length; // 2
noms.clear(); // Vide
Opérations ensemblistes
Set<int> set1 = {1, 2, 3};
Set<int> set2 = {3, 4, 5};
set1.union(set2); // {1, 2, 3, 4, 5}
set1.intersection(set2); // {3}
set1.difference(set2); // {1, 2}
Comparaison des collections
List : Ordre garanti, doublons autorisés, accès par index Map : Clé-valeur, accès rapide par clé Set : Valeurs uniques, pas d'ordre garanti (sauf LinkedHashSet)
Exercice
-
List
- Créez et manipulez des listes
- Utilisez map, where, forEach
- Testez toutes les méthodes
-
Map
- Créez des maps
- Stockez et récupérez des valeurs
- Parcourez avec différentes méthodes
-
Set
- Retirez les doublons d'une liste
- Testez les opérations ensemblistes
- Utilisez pour vérifier l'appartenance
-
Méthodes avancées
- Utilisez reduce, fold
- Testez firstWhere, where
- Comprenez les différences
-
Choix de collection
- Identifiez la meilleure collection pour différents cas
- Justifiez vos choix
- Testez les performances
Quiz
-
Quelle méthode transforme chaque élément d'une liste ?
- where
- map
- reduce
-
Que fait Set en Dart ?
- Trie les éléments
- Stocke des valeurs uniques
- Permet les doublons
-
Comment accéder à une valeur dans une Map ?
- map.get('cle')
- map['cle']
- map.value('cle')
-
Que fait where() sur une liste ?
- Transforme les éléments
- Filtre les éléments
- Trie les éléments
-
Comment retirer les doublons d'une liste ?
- list.unique()
- list.toSet().toList()
- list.removeDuplicates()
Mini défi
Mission : Créer un système de gestion de données complet
Créez un système qui gère une collection de produits :
Données :
class Produit {
int id;
String nom;
double prix;
int stock;
String categorie;
}
Fonctionnalités :
- Recherche par nom, ID, catégorie
- Tri par prix, stock, nom
- Calculs (prix moyen, total stock)
- Filtres (stock > 0, prix < seuil)
- Groupement par catégorie (utilisez Map)
Critères :
- ✅ Utilisation de List, Map, Set appropriés
- ✅ Méthodes de collection (map, where, etc.)
- ✅ Code organisé
- ✅ Performance optimisée
Objectif : Maîtriser toutes les collections Dart et savoir choisir la bonne pour chaque situation.
Validation : Vous pouvez passer au module suivant quand vous maîtrisez List, Map, Set et pouvez les utiliser efficacement.