Übersicht ü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 Liste ist eine geordnete Sammlung, deren Elemente über ihren Index abgerufen werden. Elemente behalten ihre Einfügereihenfolge bei, und Duplikate sind zulässig:
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:
| Sammlung | Geordnet | Duplikate | Zugriff über |
|---|---|---|---|
| Liste | Ja | Erlaubt | Index |
| Menge | Nein | Nicht erlaubt | Enthaltensein-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
EinfachWir erstellen ein Klassenverwaltungssystem, das alle drei Sammlungstypen verwendet, um Schülerdaten auf unterschiedliche Weise zu organisieren. Du wirst sehen, wie Listen, Mengen und Maps jeweils unterschiedliche Zwecke erfüllen, wenn dieselben Informationen verwaltet werden.
Du organisierst deinen Code in zwei Dateien:
classroom.dart: Erstelle eineClassroom-Klasse, die Schülerdaten mithilfe aller drei Sammlungstypen verwaltet:- Eine
List<String>namensattendanceOrder, um die Schüler in der Reihenfolge ihrer Ankunft zu erfassen (Duplikate sind erlaubt, wenn sich ein Schüler mehrmals anmeldet) - Eine
Set<String>namensuniqueStudents, um zu erfassen, welche Schüler anwesend sind (keine Duplikate) - Eine
Map<String, int>namensscores, um die Testergebnisse der einzelnen Schüler zu speichern
recordArrival(String name)– fügt den Namen sowohl zur Anwesenheitsliste als auch zur Menge der eindeutigen Schüler hinzusetScore(String name, int score)– speichert die Punktzahl des Schülers in der MapprintReport()– gibt den Klassenbericht aus (das Format ist unten dargestellt)
- Eine
main.dart: Importiere deine classroom-Datei und führe das System vor:- Erstelle eine
Classroom-Instanz - Erfasse die Ankünfte in dieser Reihenfolge:
'Alice','Bob','Alice','Carol','Bob' - Lege die Punktzahlen fest: Alice =
95, Bob =87, Carol =92 - Rufe
printReport()auf
- Erstelle 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}Beachte, wie die Liste jede Ankunft (einschließlich Duplikaten) beibehält, die Menge automatisch nur eindeutige Namen enthä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}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 Schlüsselwort thisMethodenInstanzvariablenGrundlagen von KonstruktorenRückblick – Einfacher Taschenrechner4Null-Sicherheit
Einführung in die Null-SicherheitNullable vs. Non-NullableDie Operatoren ? und !Late-Schlüsselwort und Null-SicherheitNull-bewusste OperatorenNull-Sicherheit in KlassenRückblick – Benutzers профilsystem7Abstrakte Klassen & Interfaces
Abstrakte KlassenAbstrakte MethodenInterfaces in DartImplizite InterfacesImplementieren vs. ErweiternMehrere InterfacesZusammenfassung – Formrechner10Collections & Generics
Übersicht über List, Set und MapTypsichere CollectionsGenerische KlassenGenerische MethodenGenerische EinschränkungenIterable & IteratorRückblick – Generischer Speicher13Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungErweiterungsmethodenAufrufbare KlassenVersiegelte Klassen (Dart 3)Records (Dart 3)Muster & Matching (3.0)Enums mit Methoden16Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen2Konstruktoren in Dart
StandardkonstruktorBenannte KonstruktorenInitialisierungslistenKonstantenkonstruktorenFactory-KonstruktorenWeiterleitende KonstruktorenRückblick – Shape Builder5Kapselung
Öffentliche vs. private MemberDie _-Präfix-KonventionBibliotheksweite SichtbarkeitTiefergehende Getter & SetterInformationsverbergungRückblick – Studierendendaten8Mixins
Einführung in MixinsMixins erstellenMehrere Mixins verwendenDas Schlüsselwort „on“ in MixinsMixin vs. VererbungMixin vs. SchnittstelleRückblick – Tiersystem11Spezielle Methoden
toString()-ÜberschreibunghashCode- & ==-ÜberschreibungComparable-Schnittstellecall()-MethodenoSuchMethod-ÜberschreibungWiederholung – Benutzerdefinierte Collection14Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFabrikmusterBeobachtermusterStrategiemuster17Abschließende Herausforderungen
E-Learning-PlattformBankingsystemSpielcharaktersystemFahrzeugvermietung3Klassen-Eigenschaften
Instanz- vs. statische MemberFinal- und Const-FelderLate-VariablenStatische Methoden und FelderGetter und SetterRückblick – Bankkontoverwaltung6Vererbung
Grundlegende VererbungDas Schlüsselwort superMethodenüberschreibungDie Annotation @overrideDas Schlüsselwort final für KlassenKonstruktoren und VererbungZusammenfassung – Mitarbeiterhierarchie9Polymorphismus
Grundlagen des PolymorphismusPolymorphismus über InterfacesLaufzeit-TypüberprüfungDie Operatoren is & asCovariant-SchlüsselwortZusammenfassung – ZahlungsprozessorÜbe selbstständig: Online-Dart-Compiler