Überblick über List, Set und Map
Teil des Abschnitts Objektorientierte Programmierung der Dart-Journey von Coddy — Lektion 63 von 110.
Dart bietet drei grundlegende Collection-Typen, die Sie bei der Entwicklung von Anwendungen ständig verwenden werden. Jeder dient einem anderen Zweck für die Organisation und den Zugriff auf Daten.
Eine List ist eine geordnete Sammlung, bei der auf Elemente über einen Index zugegriffen wird. Die Elemente behalten ihre Einfügereihenfolge bei und Duplikate sind erlaubt:
var fruits = ['apple', 'banana', 'apple'];
print(fruits[0]); // apple
print(fruits.length); // 3Ein Set ist eine ungeordnete Sammlung von eindeutigen Elementen. Wenn Sie versuchen, ein Duplikat hinzuzufügen, wird es einfach ignoriert:
var uniqueNumbers = {1, 2, 3, 2, 1};
print(uniqueNumbers); // {1, 2, 3}Eine Map speichert Schlüssel-Wert-Paare, mit denen Sie Werte anhand ihres zugehörigen Schlüssels nachschlagen können:
var ages = {'Alice': 30, 'Bob': 25};
print(ages['Alice']); // 30Hier ist ein kurzer Vergleich:
| Collection | Geordnet | Duplikate | Zugriff über |
|---|---|---|---|
| List | Ja | Erlaubt | Index |
| Set | Nein | Nicht erlaubt | Enthält-Prüfung |
| Map | Nein* | Eindeutige Schlüssel | Schlüssel |
Diese Sammlungen werden noch leistungsfähiger, wenn sie mit Generics kombiniert werden, die Sie in den kommenden Lektionen erkunden werden, um typsichere Sammlungen zu erstellen, die mit Ihren benutzerdefinierten Klassen funktionieren.
Aufgabe
EinfachLassen Sie uns ein Klassenverwaltungssystem erstellen, das alle drei Sammlungstypen verwendet, um Schülerdaten auf unterschiedliche Weise zu organisieren. Sie werden sehen, wie Listen, Sets und Maps jeweils unterschiedliche Zwecke erfüllen, wenn dieselben Informationen verwaltet werden.
Sie werden Ihren Code in zwei Dateien organisieren:
classroom.dart: Erstellen Sie eineClassroom-Klasse, die Schülerdaten mit allen drei Sammlungstypen verwaltet:- Eine
List<String>namensattendanceOrder, um Schüler in der Reihenfolge ihrer Ankunft zu erfassen (Duplikate sind erlaubt, wenn sich ein Schüler mehrmals anmeldet) - Ein
Set<String>namensuniqueStudents, um zu erfassen, welche Schüler anwesend sind (keine Duplikate) - Eine
Map<String, int>namensscores, um das Testergebnis jedes Schülers zu speichern
recordArrival(String name)- fügt den Namen sowohl der Anwesenheitsliste als auch dem Set der eindeutigen Schüler hinzusetScore(String name, int score)- speichert die Punktzahl des Schülers in der MapprintReport()- gibt den Klassenbericht aus (Format unten gezeigt)
- Eine
main.dart: Importieren Sie Ihre Classroom-Datei und demonstrieren Sie das System:- Erstellen Sie eine
Classroom-Instanz - Erfassen Sie die Ankünfte in dieser Reihenfolge:
'Alice','Bob','Alice','Carol','Bob' - Setzen Sie die Punktzahlen: Alice =
95, Bob =87, Carol =92 - Rufen Sie
printReport()auf
- Erstellen Sie eine
Die Methode printReport() sollte Folgendes ausgeben:
Arrival Order: [Alice, Bob, Alice, Carol, Bob]
Unique Students: {Alice, Bob, Carol}
Scores: {Alice: 95, Bob: 87, Carol: 92}Beachten Sie, wie die List jede Ankunft (einschließlich Duplikate) bewahrt, das Set automatisch nur eindeutige Namen behält und die Map jeden Schüler mit seiner Punktzahl verknüpft. Jeder Sammlungstyp erfüllt seinen Zweck perfekt!
Erwartete Ausgabe:
Arrival Order: [Alice, Bob, Alice, Carol, Bob]
Unique Students: {Alice, Bob, Carol}
Scores: {Alice: 95, Bob: 87, Carol: 92}Spickzettel
Dart bietet drei Kern-Collection-Typen zur Organisation von Daten:
List - Eine geordnete Sammlung, bei der auf Elemente über einen Index zugegriffen wird. Duplikate sind erlaubt:
var fruits = ['apple', 'banana', 'apple'];
print(fruits[0]); // apple
print(fruits.length); // 3Set - Eine ungeordnete Sammlung von eindeutigen Elementen. Duplikate werden automatisch ignoriert:
var uniqueNumbers = {1, 2, 3, 2, 1};
print(uniqueNumbers); // {1, 2, 3}Map - Speichert Schlüssel-Wert-Paare für die Suche nach Schlüsseln:
var ages = {'Alice': 30, 'Bob': 25};
print(ages['Alice']); // 30| Sammlung | Geordnet | Duplikate | Zugriff über |
|---|---|---|---|
| List | Ja | Erlaubt | Index |
| Set | Nein | Nicht erlaubt | Enthält-Prüfung |
| Map | Nein* | Eindeutige Schlüssel | Schlüssel |
Probier es selbst
import 'classroom.dart';
void main() {
// TODO: Erstelle eine Classroom-Instanz
// TODO: Erfasse die Ankünfte in dieser Reihenfolge: 'Alice', 'Bob', 'Alice', 'Carol', 'Bob'
// TODO: Setze die Punktzahlen: Alice = 95, Bob = 87, Carol = 92
// TODO: Rufe printReport() auf, um die Klassendaten anzuzeigen
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienBibliotheken & ImportsEinführung in die OOPKlassen vs. ObjekteDas this-SchlüsselwortMethodenInstanzvariablenKonstruktor-GrundlagenWiederholung – Einfacher Taschenrechner4Null-Sicherheit
Einführung in Null-SicherheitNullable vs. Non-NullableDie ? und ! OperatorenLate-Schlüsselwort & Null-SicherheitNull-aware OperatorenNull-Sicherheit in KlassenZusammenfassung – Benutzerprofil-System7Abstrakte Klassen & Interfaces
Abstrakte KlassenAbstrakte MethodenInterfaces in DartImplizite InterfacesImplementieren vs. ErweiternMehrfache InterfacesRückblick – Shape Calculator10Collections & Generics
Überblick über List, Set und MapTypsichere CollectionsGenerische KlassenGenerische MethodenGenerische ConstraintsIterable & IteratorZusammenfassung – Generische Speicherung13Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungExtension MethodsCallable ClassesSealed Classes (Dart 3)Records (Dart 3)Patterns & Matching (3.0)Enums mit Methoden16Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen2Konstruktoren in Dart
Standard-KonstruktorBenannte KonstruktorenInitialisierungslistenKonstante KonstruktorenFactory-KonstruktorenWeiterleitende KonstruktorenZusammenfassung – Shape Builder5Kapselung
Öffentliche vs. private MemberDie _ Präfix-KonventionSichtbarkeit auf Library-EbeneGetter & Setter im DetailInformation HidingRückblick – Schülerdatensätze8Mixins
Einführung in MixinsMixins erstellenMehrere Mixins verwendenDas on-Schlüsselwort in MixinsMixin vs. VererbungMixin vs. InterfaceZusammenfassung - Tiersystem11Spezielle Methoden
toString() überschreibenhashCode & == überschreibenComparable-Interfacecall()-MethodenoSuchMethod überschreibenZusammenfassung – Eigene Collection14Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster3Klasseneigenschaften
Instanz- vs. statische MemberFinal & Const FelderLate-VariablenStatische Methoden & FelderGetter und SetterZusammenfassung – Bankkonto-Manager6Vererbung
Grundlagen der VererbungDas super-SchlüsselwortMethoden überschreibenDie @override-AnnotationDas final-Klassen-SchlüsselwortKonstruktoren & VererbungRückblick – Mitarbeiter-Hierarchie9Polymorphismus
Polymorphismus-GrundlagenPolymorphismus über InterfacesTypprüfung zur LaufzeitDie is & as OperatorenDas covariant SchlüsselwortZusammenfassung – Payment Processor