Przegląd List, Set i Map
Część sekcji Programowanie obiektowe ścieżki Dart w Coddy. Lekcja 63 z 110.
Dart udostępnia trzy podstawowe typy kolekcji, których będziesz stale używać podczas tworzenia aplikacji. Każdy z nich służy innemu celowi w organizowaniu danych i uzyskiwaniu do nich dostępu.
Lista to uporządkowana kolekcja, w której elementy są dostępne za pomocą indeksu. Elementy zachowują kolejność wstawiania, a duplikaty są dozwolone:
var fruits = ['apple', 'banana', 'apple'];
print(fruits[0]); // apple
print(fruits.length); // 3Zbiór to nieuporządkowana kolekcja unikalnych elementów. Jeśli spróbujesz dodać duplikat, zostanie on po prostu zignorowany:
var uniqueNumbers = {1, 2, 3, 2, 1};
print(uniqueNumbers); // {1, 2, 3}Mapa przechowuje pary klucz-wartość, umożliwiając wyszukiwanie wartości za pomocą powiązanego z nią klucza:
var ages = {'Alice': 30, 'Bob': 25};
print(ages['Alice']); // 30Oto krótkie porównanie:
| Kolekcja | Uporządkowana | Duplikaty | Dostęp według |
|---|---|---|---|
| Lista | Tak | Dozwolone | Indeksu |
| Zbiór | Nie | Niedozwolone | Sprawdzenia zawartości |
| Mapa | Nie* | Unikalne klucze | Klucza |
Te kolekcje stają się jeszcze potężniejsze, gdy połączysz je z typami generycznymi, które poznasz w kolejnych lekcjach, aby tworzyć bezpieczne pod względem typów kolekcje współpracujące z Twoimi własnymi klasami.
Wyzwanie
ŁatwyZbudujmy system zarządzania klasą, który wykorzystuje wszystkie trzy typy kolekcji do porządkowania danych uczniów na różne sposoby. Zobaczysz, jak Listy, Sety i Mapy pełnią różne funkcje przy zarządzaniu tymi samymi informacjami.
Podzielisz kod na dwa pliki:
classroom.dart: Utwórz klasęClassroom, która zarządza danymi uczniów, wykorzystując wszystkie trzy typy kolekcji:List<String>o nazwieattendanceOrderdo śledzenia uczniów w kolejności przybycia (duplikaty są dozwolone, jeśli uczeń zapisze się kilka razy)Set<String>o nazwieuniqueStudentsdo śledzenia obecnych uczniów (bez duplikatów)Map<String, int>o nazwiescoresdo przechowywania wyniku testu każdego ucznia
recordArrival(String name)- dodaje imię zarówno do listy obecności, jak i do zbioru unikalnych uczniówsetScore(String name, int score)- zapisuje wynik ucznia w mapieprintReport()- wyświetla raport klasy (format pokazano poniżej)
main.dart: Zaimportuj plik klasy i zademonstruj działanie systemu:- Utwórz instancję klasy
Classroom - Zapisz przybycia w tej kolejności:
'Alice','Bob','Alice','Carol','Bob' - Ustaw wyniki: Alice =
95, Bob =87, Carol =92 - Wywołaj
printReport()
- Utwórz instancję klasy
Metoda printReport() powinna wyświetlić:
Arrival Order: [Alice, Bob, Alice, Carol, Bob]
Unique Students: {Alice, Bob, Carol}
Scores: {Alice: 95, Bob: 87, Carol: 92}Zwróć uwagę, że List zachowuje każde przybycie (również duplikaty), Set automatycznie przechowuje tylko unikalne imiona, a Map przypisuje wynik każdemu uczniowi. Każdy typ kolekcji doskonale spełnia swoje zadanie!
Oczekiwany wynik:
Arrival Order: [Alice, Bob, Alice, Carol, Bob]
Unique Students: {Alice, Bob, Carol}
Scores: {Alice: 95, Bob: 87, Carol: 92}Spróbuj swoich sił
import 'classroom.dart';
void main() {
// TODO: Utwórz instancję Classroom
// TODO: Zapisz przybycia w tej kolejności: 'Alice', 'Bob', 'Alice', 'Carol', 'Bob'
// TODO: Ustaw wyniki: Alice = 95, Bob = 87, Carol = 92
// TODO: Wywołaj printReport(), aby wyświetlić dane klasy
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy OOP
Pliki zewnętrzneBiblioteki i importyWprowadzenie do OOPKlasy a obiektySłowo kluczowe thisMetodyZmienne instancjiPodstawy konstruktorówPowtórka – prosty kalkulator4Bezpieczeństwo wartości null
Wprowadzenie do bezpieczeństwa wartości nullTypy dopuszczające null i niedopuszczające nullOperatory ? i !Słowo kluczowe late a bezpieczeństwo wartości nullOperatory uwzględniające nullBezpieczeństwo wartości null w klasachPodsumowanie — system profili użytkowników7Klasy abstrakcyjne i interfejsy
Klasy abstrakcyjneMetody abstrakcyjneInterfejsy w DartInterfejsy niejawneImplementowanie a rozszerzanieWiele interfejsówPowtórka — kalkulator kształtów10Kolekcje i typy generyczne
Przegląd List, Set i MapKolekcje bezpieczne typowoKlasy generyczneMetody generyczneOgraniczenia typów generycznychIterable i IteratorPowtórka — generyczne przechowywanie danych13Zaawansowane koncepcje OOP
Kompozycja a dziedziczenieMetody rozszerzająceKlasy wywoływalneKlasy zapieczętowane (Dart 3)Rekordy (Dart 3)Wzorce i dopasowywanie (3.0)Typy wyliczeniowe z metodami16Projekt: Zarządzanie biblioteką
Omówienie projektuKlasy książek i użytkowników2Konstruktory w Dart
Konstruktor domyślnyKonstruktory nazwaneListy inicjalizująceKonstruktory stałeKonstruktory fabryczneKonstruktory przekierowującePodsumowanie — budowanie kształtów5Hermetyzacja
Elementy publiczne a prywatneKonwencja prefiksu _Prywatność na poziomie bibliotekiGettery i settery — szczegółowoUkrywanie informacjiPodsumowanie — dane uczniów8Domieszki
Wprowadzenie do domieszekTworzenie domieszekKorzystanie z wielu domieszekSłowo kluczowe on w domieszkachDomieszka a dziedziczenieDomieszka a interfejsPodsumowanie – system zwierząt11Metody specjalne
Nadpisanie toString()Nadpisanie hashCode i ==Interfejs ComparableMetoda call()Nadpisanie noSuchMethodPodsumowanie — własna kolekcja14Wzorce projektowe, część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec Strategy3Właściwości klas
Elementy instancji a elementy statycznePola final i constZmienne inicjalizowane z opóźnieniemMetody i pola statyczneGettery i setteryPowtórzenie – menedżer kont bankowych6Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe superPrzesłanianie metodAdnotacja @overrideSłowo kluczowe final dla klasKonstruktory i dziedziczeniePowtórzenie – hierarchia pracowników9Polimorfizm
Podstawy polimorfizmuPolimorfizm za pomocą interfejsówSprawdzanie typu w czasie działaniaOperatory is i asSłowo kluczowe covariantPodsumowanie — procesor płatnościPoćwicz samodzielnie: Kompilator Dart online