Właściwości mapy: klucze i wartości
Część sekcji Logika i przepływ sterowania ścieżki Dart w Coddy. Lekcja 28 z 65.
Podczas pracy z kolekcjami Map czasami trzeba osobno pobrać wszystkie klucze lub wszystkie wartości. Dart udostępnia do tego dwie wygodne właściwości: .keys i .values.
Właściwość .keys zwraca iterowalny obiekt zawierający wszystkie klucze z mapy, a .values zwraca iterowalny obiekt zawierający wszystkie odpowiadające im wartości. Te właściwości są szczególnie przydatne, gdy trzeba przetwarzać klucze i wartości niezależnie.
Map<String, double> inventory = {
'Laptop': 999.99,
'Mouse': 25.50,
'Keyboard': 75.00
};
Iterable<String> productNames = inventory.keys;
Iterable<double> prices = inventory.values;
print(productNames); // (Laptop, Mouse, Keyboard)
print(prices); // (999.99, 25.5, 75.0)Ponieważ te właściwości zwracają obiekty iterowalne, a nie listy, możesz przekonwertować je na listy za pomocą .toList(), jeśli potrzebujesz funkcjonalności dostępnej tylko dla list. Ten podział na klucze i wartości jest szczególnie przydatny, gdy chcesz analizować lub modyfikować jeden aspekt danych niezależnie od drugiego.
Wyzwanie
ŁatwyUtwórz program, który zarządza cyfrową biblioteką, analizując zbiory książek i wyodrębniając informacje o tytułach oraz latach ich publikacji. Twój program powinien:
- Wczytać ciąg znaków reprezentujący nazwę biblioteki
- Wczytać wiele par danych wejściowych reprezentujących tytuły książek i lata ich publikacji (wczytywanie zakończy się po otrzymaniu
"catalog_done") - Utworzyć Map do przechowywania każdego tytułu książki jako klucza, a roku jej publikacji jako wartości
- Użyć właściwości
.keys, aby wyodrębnić wszystkie tytuły książek i przekonwertować je na List - Użyć właściwości
.values, aby wyodrębnić wszystkie lata publikacji i przekonwertować je na List - Znaleźć najstarszą książkę, określając najmniejszy rok wśród wartości
- Znaleźć najnowszą książkę, określając największy rok wśród wartości
- Wypisać analizę biblioteki dokładnie w formacie przedstawionym poniżej
Na przykład, jeśli nazwa biblioteki to "Central Library", a katalog zawiera "To Kill a Mockingbird" z rokiem 1960, "1984" z rokiem 1949, "The Great Gatsby" z rokiem 1925 oraz "Harry Potter" z rokiem 1997, program powinien wypisać:
Library: Central Library
Book Collection Analysis:
All book titles: [To Kill a Mockingbird, 1984, The Great Gatsby, Harry Potter]
All publication years: [1960, 1949, 1925, 1997]
Total books in collection: 4
Oldest book year: 1925
Newest book year: 1997
Collection span: 72 years
Status: Library catalog analysis completedJeśli nazwa biblioteki to "University Library", a katalog zawiera "Pride and Prejudice" z rokiem 1813, "Moby Dick" z rokiem 1851 oraz "Brave New World" z rokiem 1932, program powinien wypisać:
Library: University Library
Book Collection Analysis:
All book titles: [Pride and Prejudice, Moby Dick, Brave New World]
All publication years: [1813, 1851, 1932]
Total books in collection: 3
Oldest book year: 1813
Newest book year: 1932
Collection span: 119 years
Status: Library catalog analysis completedJeśli nazwa biblioteki to "Community Library", a katalog zawiera "The Hobbit" z rokiem 1937, "Dune" z rokiem 1965, "Neuromancer" z rokiem 1984, "The Martian" z rokiem 2011 oraz "Klara and the Sun" z rokiem 2021, program powinien wypisać:
Library: Community Library
Book Collection Analysis:
All book titles: [The Hobbit, Dune, Neuromancer, The Martian, Klara and the Sun]
All publication years: [1937, 1965, 1984, 2011, 2021]
Total books in collection: 5
Oldest book year: 1937
Newest book year: 2021
Collection span: 84 years
Status: Library catalog analysis completedTwój program musi używać właściwości .keys, aby wyodrębnić wszystkie tytuły książek, oraz właściwości .values, aby wyodrębnić wszystkie lata publikacji. Przekonwertuj obie iterowalne kolekcje na List za pomocą .toList(). Oblicz zakres lat zbioru, odejmując najstarszy rok od najnowszego. Format danych wejściowych będzie następujący: nazwa biblioteki, a następnie naprzemiennie tytuły książek i lata ich publikacji (jako ciągi znaków, które należy przekonwertować na liczby całkowite), aż do "catalog_done".
Spróbuj swoich sił
import 'dart:io';
void main() {
// Wczytaj nazwę biblioteki
String? libraryName = stdin.readLineSync();
// Utwórz Map do przechowywania tytułów książek i lat wydania
Map<String, int> bookCatalog = {};
// Wczytuj tytuły książek i lata wydania aż do "catalog_done"
while (true) {
String? input = stdin.readLineSync();
if (input == "catalog_done") {
break;
}
String bookTitle = input!;
String? yearInput = stdin.readLineSync();
int publicationYear = int.parse(yearInput!);
bookCatalog[bookTitle] = publicationYear;
}
// TODO: Napisz swój kod poniżej
// Wyodrębnij tytuły książek za pomocą właściwości .keys i przekonwertuj je na List
// Wyodrębnij lata wydania za pomocą właściwości .values i przekonwertuj je na List
// Znajdź najwcześniejszy i najpóźniejszy rok wydania
// Oblicz rozpiętość lat w kolekcji
// Wypisz analizę zbiorów biblioteki w wymaganym formacie
print("Library: $libraryName");
print("Book Collection Analysis:");
// Dodaj tutaj instrukcje wypisujące wyniki
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ sterowania
1Zaawansowana manipulacja listami
Właściwości listy: first i lastStan listy: isEmpty i isNotEmpOdwracanie listyDodawanie do listy: insertUsuwanie z listy: removeWhereWyszukiwanie na liście: indexOfSortowanie listyMieszanie elementów listyPodsumowanie – Organizator listy4Zaawansowane operacje na mapach
Iterowanie po mapieSprawdzanie kluczy i wartościWłaściwości mapy: klucze i wartościDodawanie warunkowe: putIfAbsentUsuwanie wpisów z mapyZagnieżdżone mapyPodsumowanie – aktualizacja stanu magazynowego2Operacje funkcyjne na listach
Przekształcanie za pomocą 'map'Filtrowanie za pomocą 'where'Używanie '.toList()'Sprawdzanie warunków za pomocą 'any'Warunki z użyciem 'every'Wyszukiwanie za pomocą 'firstWhere'Podsumowanie — filtrowanie danych5Projekt: Kalkulator koszyka zakupowego
Konfiguracja projektuDodawanie produktów do koszyka3Zbiory
Czym jest zbiór?Tworzenie zbioruDodawanie i usuwanie elementów ze zbiorówSprawdzanie, czy element znajduje się w zbiorzeKonwersja listy na zbiórSuma zbiorówCzęść wspólna zbiorówRóżnica zbiorówPodsumowanie — unikalna lista gościPoćwicz samodzielnie: Kompilator Dart online