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 les collections de livres et en extrayant des informations sur les titres et leurs années de publication. Votre programme doit :

  1. Lire une chaîne de caractères en entrée 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 terminera lorsque vous recevrez "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 de livres et les convertir en une List
  5. Utiliser la propriété .values pour extraire toutes les années de publication et les convertir en une List
  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 exactement au format indiqué 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, "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, "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, "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 de livres et la propriété .values pour extraire toutes les années de publication. Convertissez les deux itérables en Lists en utilisant .toList(). Calculez la durée de la collection en soustrayant l'année la plus ancienne de l'année la plus récente. Le format d'entrée sera : le nom de la bibliothèque, puis alternativement les titres des livres et les années de publication (sous forme de chaînes de caractères qui doivent être converties en entiers), se terminant par "catalog_done".

Aide-mémoire

Utilisez .keys pour extraire toutes les clés d'une Map et .values pour extraire toutes les valeurs :

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)

Convertissez les itérables en listes en utilisant .toList() pour des fonctionnalités spécifiques aux listes :

List<String> namesList = inventory.keys.toList();
List<double> pricesList = inventory.values.toList();

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