Aperçu des List, Set et Map
Fait partie de la section Programmation Orientée Objet du Journey Dart de Coddy — leçon 63 sur 110.
Dart propose trois types de collections de base que vous utiliserez constamment lors de la création d'applications. Chacun répond à un objectif différent pour l'organisation et l'accès aux données.
Une List est une collection ordonnée où les éléments sont accessibles par index. Les éléments conservent leur ordre d'insertion et les doublons sont autorisés :
var fruits = ['apple', 'banana', 'apple'];
print(fruits[0]); // apple
print(fruits.length); // 3Un Set est une collection non ordonnée d'éléments uniques. Si vous essayez d'ajouter un doublon, il est simplement ignoré :
var uniqueNumbers = {1, 2, 3, 2, 1};
print(uniqueNumbers); // {1, 2, 3}Un Map stocke des paires clé-valeur, vous permettant de rechercher des valeurs par leur clé associée :
var ages = {'Alice': 30, 'Bob': 25};
print(ages['Alice']); // 30Voici une comparaison rapide :
| Collection | Ordonnée | Doublons | Accès par |
|---|---|---|---|
| List | Oui | Autorisés | Index |
| Set | Non | Non autorisés | Vérification de présence |
| Map | Non* | Clés uniques | Clé |
Ces collections deviennent encore plus puissantes lorsqu'elles sont combinées avec les génériques, que vous explorerez dans les prochaines leçons pour créer des collections de type sécurisé qui fonctionnent avec vos classes personnalisées.
Défi
FacileConstruisons un système de gestion de classe qui utilise les trois types de collections pour organiser les données des élèves de différentes manières. Vous verrez comment les Lists, Sets et Maps servent chacun des objectifs distincts lors de la gestion des mêmes informations.
Vous organiserez votre code en deux fichiers :
classroom.dart: Créez une classeClassroomqui gère les données des élèves en utilisant les trois types de collections :- Une
List<String>appeléeattendanceOrderpour suivre les élèves dans l'ordre de leur arrivée (doublons autorisés si un élève s'inscrit plusieurs fois) - Un
Set<String>appeléuniqueStudentspour suivre quels élèves sont présents (pas de doublons) - Un
Map<String, int>appeléscorespour stocker la note d'examen de chaque élève
recordArrival(String name)- ajoute le nom à la fois à la liste de présence et à l'ensemble des élèves uniquessetScore(String name, int score)- stocke la note de l'élève dans la mapprintReport()- affiche le rapport de la classe (format illustré ci-dessous)
- Une
main.dart: Importez votre fichier classroom et faites une démonstration du système :- Créez une instance de
Classroom - Enregistrez les arrivées dans cet ordre :
'Alice','Bob','Alice','Carol','Bob' - Définissez les notes : Alice =
95, Bob =87, Carol =92 - Appelez
printReport()
- Créez une instance de
La méthode printReport() doit afficher :
Arrival Order: [Alice, Bob, Alice, Carol, Bob]
Unique Students: {Alice, Bob, Carol}
Scores: {Alice: 95, Bob: 87, Carol: 92}Remarquez comment la List préserve chaque arrivée (y compris les doublons), le Set conserve automatiquement uniquement les noms uniques, et la Map associe chaque élève à sa note. Chaque type de collection remplit parfaitement son rôle !
Sortie attendue :
Arrival Order: [Alice, Bob, Alice, Carol, Bob]
Unique Students: {Alice, Bob, Carol}
Scores: {Alice: 95, Bob: 87, Carol: 92}Aide-mémoire
Dart propose trois types de collections principaux pour organiser les données :
List - Une collection ordonnée où les éléments sont accessibles par index. Les doublons sont autorisés :
var fruits = ['apple', 'banana', 'apple'];
print(fruits[0]); // apple
print(fruits.length); // 3Set - Une collection non ordonnée d'éléments uniques. Les doublons sont automatiquement ignorés :
var uniqueNumbers = {1, 2, 3, 2, 1};
print(uniqueNumbers); // {1, 2, 3}Map - Stocke des paires clé-valeur pour une recherche par clé :
var ages = {'Alice': 30, 'Bob': 25};
print(ages['Alice']); // 30| Collection | Ordonnée | Doublons | Accès par |
|---|---|---|---|
| List | Oui | Autorisés | Index |
| Set | Non | Non autorisés | Vérification de présence |
| Map | Non* | Clés uniques | Clé |
Essayez vous-même
import 'classroom.dart';
void main() {
// TODO : Créer une instance de Classroom
// TODO : Enregistrer les arrivées dans cet ordre : 'Alice', 'Bob', 'Alice', 'Carol', 'Bob'
// TODO : Définir les scores : Alice = 95, Bob = 87, Carol = 92
// TODO : Appeler printReport() pour afficher les données de la classe
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Programmation Orientée Objet
1Les bases de la POO
Fichiers externesBibliothèques et importsIntroduction à la POOClasses vs ObjetsLe mot-clé thisMéthodesVariables d'instanceBases des constructeursRécapitulatif - Calculatrice simple4Null Safety
Introduction à la Null SafetyNullable vs Non-NullableLes opérateurs ? et !Le mot-clé late et la Null SafetyLes opérateurs Null-AwareLa Null Safety dans les classesRécapitulatif - Système de profil utilisateur7Classes abstraites et Interfaces
Classes abstraitesMéthodes abstraitesInterfaces en DartInterfaces implicitesImplémentation vs ExtensionInterfaces multiplesRécapitulatif - Calculateur de formes10Collections et Génériques
Aperçu des List, Set et MapCollections Type-SafeClasses génériquesMéthodes génériquesContraintes de généricitéIterable & IteratorRécapitulatif - Stockage générique2Les constructeurs en Dart
Constructeur par défautConstructeurs nommésListes d'initialisationConstructeurs constantsConstructeurs factoryConstructeurs de redirectionRécapitulatif - Shape Builder5Encapsulation
Membres publics vs privésLa convention du préfixe _Visibilité au niveau de la bibliothèqueApprofondissement des Getters & SettersMasquage d'informationsRécapitulatif - Dossiers d'étudiants8Mixins
Introduction aux MixinsCréation de MixinsUtilisation de plusieurs MixinsLe mot-clé on dans les MixinsMixin vs HéritageMixin vs InterfaceRécapitulatif - Système Animal11Méthodes spéciales
Redéfinition de toString()Redéfinition de hashCode & ==Interface ComparableMéthode call()Redéfinition de noSuchMethodRécapitulatif - Collection personnalisée14Patrons de conception Partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FabriquePatron ObservateurPatron Stratégie3Propriétés de classe
Membres d'instance vs statiquesChamps Final & ConstVariables LateMéthodes et champs statiquesGetters et SettersRécapitulatif - Gestionnaire de compte bancaire6Héritage
Bases de l'héritageLe mot-clé superRedéfinition de méthodeL'annotation @overrideLe mot-clé final pour les classesConstructeurs et héritageRécapitulatif - Hiérarchie des employés9Polymorphisme
Bases du polymorphismePolymorphisme via les interfacesVérification de type à l'exécutionLes opérateurs is & asMot-clé covariantRécapitulatif - Processeur de paiement12POO Asynchrone
Futures & async/awaitBases des StreamsStream ControllersConstructeurs asynchronesL'asynchrone dans les méthodes de classeRécapitulatif - Data Fetcher15Patrons de conception Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode ModèlePatron ÉtatPatron CompositePatron Repository