Menu
Coddy logo textTech

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);  // 3

Zbió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']);  // 30

Oto krótkie porównanie:

KolekcjaUporządkowanaDuplikatyDostęp według
ListaTakDozwoloneIndeksu
ZbiórNieNiedozwoloneSprawdzenia zawartości
MapaNie*Unikalne kluczeKlucza

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.

challenge icon

Wyzwanie

Łatwy

Zbudujmy 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 nazwie attendanceOrder do śledzenia uczniów w kolejności przybycia (duplikaty są dozwolone, jeśli uczeń zapisze się kilka razy)
    • Set<String> o nazwie uniqueStudents do śledzenia obecnych uczniów (bez duplikatów)
    • Map<String, int> o nazwie scores do przechowywania wyniku testu każdego ucznia
    Klasa Classroom powinna mieć następujące metody:
    • recordArrival(String name) - dodaje imię zarówno do listy obecności, jak i do zbioru unikalnych uczniów
    • setScore(String name, int score) - zapisuje wynik ucznia w mapie
    • printReport() - 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()

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
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Dart online