Menu
Coddy logo textTech

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.

challenge icon

Wyzwanie

Łatwy

Utwó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:

  1. Wczytać ciąg znaków reprezentujący nazwę biblioteki
  2. Wczytać wiele par danych wejściowych reprezentujących tytuły książek i lata ich publikacji (wczytywanie zakończy się po otrzymaniu "catalog_done")
  3. Utworzyć Map do przechowywania każdego tytułu książki jako klucza, a roku jej publikacji jako wartości
  4. Użyć właściwości .keys, aby wyodrębnić wszystkie tytuły książek i przekonwertować je na List
  5. Użyć właściwości .values, aby wyodrębnić wszystkie lata publikacji i przekonwertować je na List
  6. Znaleźć najstarszą książkę, określając najmniejszy rok wśród wartości
  7. Znaleźć najnowszą książkę, określając największy rok wśród wartości
  8. 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 completed

Jeś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 completed

Jeś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 completed

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

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

Poćwicz samodzielnie: Kompilator Dart online