Menu
Coddy logo textTech

Proprietà delle mappe: chiavi e valori

Fa parte della sezione Logica e flusso del percorso Dart di Coddy. Lezione 28 di 65.

Quando lavori con le raccolte Map, a volte devi estrarre tutte le chiavi o tutti i valori separatamente. Dart fornisce due comode proprietà per farlo: .keys e .values.

La proprietà .keys restituisce un iterabile contenente tutte le chiavi della mappa, mentre .values restituisce un iterabile contenente tutti i valori corrispondenti. Queste proprietà sono particolarmente utili quando devi elaborare chiavi e valori in modo indipendente.

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)

Poiché queste proprietà restituiscono iterabili anziché liste, puoi convertirle in liste usando .toList() se ti servono funzionalità specifiche delle liste. Questa separazione di chiavi e valori è particolarmente utile quando devi analizzare o manipolare un aspetto dei tuoi dati indipendentemente dall’altro.

challenge icon

Sfida

Facile

Crea un programma che gestisca un sistema di biblioteca digitale analizzando le raccolte di libri ed estraendo informazioni sui titoli e sui relativi anni di pubblicazione. Il tuo programma deve:

  1. Leggere una stringa di input che rappresenta il nome della biblioteca
  2. Leggere più coppie di input che rappresentano i titoli dei libri e i relativi anni di pubblicazione (l'input terminerà quando riceverai "catalog_done")
  3. Creare una Map per memorizzare ogni titolo di libro come chiave e il relativo anno di pubblicazione come valore
  4. Usare la proprietà .keys per estrarre tutti i titoli dei libri e convertirli in una List
  5. Usare la proprietà .values per estrarre tutti gli anni di pubblicazione e convertirli in una List
  6. Trovare il libro più antico individuando l'anno minimo tra i valori
  7. Trovare il libro più recente individuando l'anno massimo tra i valori
  8. Stampare l'analisi della biblioteca nel formato esatto mostrato di seguito

Per esempio, se il nome della biblioteca è "Central Library" e il catalogo include "To Kill a Mockingbird" con l'anno 1960, "1984" con l'anno 1949, "The Great Gatsby" con l'anno 1925, "Harry Potter" con l'anno 1997, il tuo programma dovrebbe produrre:

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

Se il nome della biblioteca è "University Library" e il catalogo include "Pride and Prejudice" con l'anno 1813, "Moby Dick" con l'anno 1851, "Brave New World" con l'anno 1932, il tuo programma dovrebbe produrre:

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

Se il nome della biblioteca è "Community Library" e il catalogo include "The Hobbit" con l'anno 1937, "Dune" con l'anno 1965, "Neuromancer" con l'anno 1984, "The Martian" con l'anno 2011, "Klara and the Sun" con l'anno 2021, il tuo programma dovrebbe produrre:

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

Il tuo programma deve usare la proprietà .keys per estrarre tutti i titoli dei libri e la proprietà .values per estrarre tutti gli anni di pubblicazione. Converti entrambi gli iterabili in List usando .toList(). Calcola l'intervallo della raccolta sottraendo l'anno più antico dall'anno più recente. Il formato dell'input sarà: nome della biblioteca, poi titoli dei libri e anni di pubblicazione alternati (come stringhe da convertire in numeri interi), terminando con "catalog_done".

Provalo tu

import 'dart:io';

void main() {
  // Leggi il nome della biblioteca
  String? libraryName = stdin.readLineSync();
  
  // Crea una Map per memorizzare i titoli dei libri e gli anni di pubblicazione
  Map<String, int> bookCatalog = {};
  
  // Leggi i titoli dei libri e gli anni fino a "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: Scrivi il tuo codice qui sotto
  // Estrai i titoli dei libri usando la proprietà .keys e convertili in una List
  // Estrai gli anni di pubblicazione usando la proprietà .values e convertili in una List
  // Trova l'anno più vecchio e quello più recente
  // Calcola l'intervallo di anni della collezione
  // Stampa l'analisi della biblioteca nel formato richiesto
  
  print("Library: $libraryName");
  print("Book Collection Analysis:");
  // Aggiungi qui le istruzioni di output
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Dart online