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.
Sfida
FacileCrea 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:
- Leggere una stringa di input che rappresenta il nome della biblioteca
- Leggere più coppie di input che rappresentano i titoli dei libri e i relativi anni di pubblicazione (l'input terminerà quando riceverai
"catalog_done") - Creare una Map per memorizzare ogni titolo di libro come chiave e il relativo anno di pubblicazione come valore
- Usare la proprietà
.keysper estrarre tutti i titoli dei libri e convertirli in una List - Usare la proprietà
.valuesper estrarre tutti gli anni di pubblicazione e convertirli in una List - Trovare il libro più antico individuando l'anno minimo tra i valori
- Trovare il libro più recente individuando l'anno massimo tra i valori
- 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 completedSe 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 completedSe 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 completedIl 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
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Manipolazione avanzata delle liste
Proprietà delle liste: primo e ultimoStato della lista: isEmpty e isNotEmpInvertire una listaAggiungere a una lista: insertRimozione dalla lista: removeWhereRicerca in una lista: indexOfOrdinare una listaMescolare una listaRiepilogo - Organizzatore di liste4Manipolazione avanzata delle mappe
Iterare su una mappaVerificare chiavi e valoriProprietà delle mappe: chiavi e valoriAggiunta condizionale: putIfAbsentRimuovere elementi da una mappaMappe annidateRiepilogo - Aggiornamento dell'inventario2Operazioni funzionali sulle liste
Trasformare con 'map'Filtrare con 'where'Usare '.toList()'Verificare condizioni con 'any'Condizioni con 'every'Trovare con 'firstWhere'Riepilogo - Filtraggio dei dati3Insiemi
Che cos'è un insieme?Creare un insiemeAggiungere e rimuovere elementi dagli insiemiVerificare la presenza di elementi in un insiemeConvertire una lista in un insiemeUnione di insiemiIntersezione di insiemiDifferenza tra insiemiRiepilogo - Lista degli ospiti uniciEsercitati da solo: Compilatore Dart online