Menu
Coddy logo textTech

Propriétés de Map : keys & values

Fait partie de la section Logique & Flux du Journey Dart de Coddy. Leçon 28 sur 65.

Lorsque vous travaillez avec des collections Map, vous avez parfois besoin d'extraire toutes les clés ou toutes les valeurs séparément. Dart fournit deux propriétés pratiques pour cela : .keys et .values.

La propriété .keys renvoie un itérable contenant toutes les clés de la map, tandis que .values renvoie un itérable contenant toutes les valeurs correspondantes. Ces propriétés sont particulièrement utiles lorsque vous avez besoin de traiter les clés et les valeurs indépendamment.

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)

Puisque ces propriétés renvoient des itérables plutôt que des listes, vous pouvez les convertir en listes en utilisant .toList() si vous avez besoin de fonctionnalités spécifiques aux listes. Cette séparation des clés et des valeurs est particulièrement utile lorsque vous devez analyser ou manipuler un aspect de vos données indépendamment de l'autre.

challenge icon

Défi

Facile

Créez un programme qui gère un système de bibliothèque numérique en analysant des collections de livres et en extrayant des informations sur les titres et leurs années de publication. Votre programme doit :

  1. Lire une entrée de type chaîne représentant le nom de la bibliothèque
  2. Lire plusieurs paires d’entrées représentant les titres des livres et leurs années de publication (la saisie se termine lorsque vous recevez "catalog_done")
  3. Créer une Map pour stocker chaque titre de livre comme clé et son année de publication comme valeur
  4. Utiliser la propriété .keys pour extraire tous les titres des livres et les convertir en liste
  5. Utiliser la propriété .values pour extraire toutes les années de publication et les convertir en liste
  6. Trouver le livre le plus ancien en identifiant l’année minimale parmi les valeurs
  7. Trouver le livre le plus récent en identifiant l’année maximale parmi les valeurs
  8. Afficher l’analyse de la bibliothèque dans le format exact présenté ci-dessous

Par exemple, si le nom de la bibliothèque est "Central Library" et que le catalogue comprend "To Kill a Mockingbird" avec l’année 1960, "1984" avec l’année 1949, "The Great Gatsby" avec l’année 1925, et "Harry Potter" avec l’année 1997, votre programme doit afficher :

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

Si le nom de la bibliothèque est "University Library" et que le catalogue comprend "Pride and Prejudice" avec l’année 1813, "Moby Dick" avec l’année 1851, et "Brave New World" avec l’année 1932, votre programme doit afficher :

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

Si le nom de la bibliothèque est "Community Library" et que le catalogue comprend "The Hobbit" avec l’année 1937, "Dune" avec l’année 1965, "Neuromancer" avec l’année 1984, "The Martian" avec l’année 2011, et "Klara and the Sun" avec l’année 2021, votre programme doit afficher :

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

Votre programme doit utiliser la propriété .keys pour extraire tous les titres des livres et la propriété .values pour extraire toutes les années de publication. Convertissez les deux itérables en listes à l’aide de .toList(). Calculez l’intervalle de la collection en soustrayant l’année du livre le plus ancien de l’année du livre le plus récent. Le format de saisie sera le suivant : le nom de la bibliothèque, puis une alternance de titres de livres et d’années de publication (sous forme de chaînes qui doivent être converties en entiers), et enfin "catalog_done".

Essayez vous-même

import 'dart:io';

void main() {
  // Lire le nom de la bibliothèque
  String? libraryName = stdin.readLineSync();
  
  // Créer une Map pour stocker les titres de livres et les années de publication
  Map<String, int> bookCatalog = {};
  
  // Lire les titres et les années des livres jusqu'à "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: Écrivez votre code ci-dessous
  // Extraire les titres des livres en utilisant la propriété .keys et convertir en List
  // Extraire les années de publication en utilisant la propriété .values et convertir en List
  // Trouver les années la plus ancienne et la plus récente
  // Calculer l'étendue de la collection
  // Afficher l'analyse de la bibliothèque au format requis
  
  print("Library: $libraryName");
  print("Book Collection Analysis:");
  // Ajoutez vos instructions de sortie ici
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique & Flux

Entraînez-vous par vous-même : Compilateur Dart en ligne