Menu
Coddy logo textTech

Propiedades del mapa: keys y values

Parte de la sección Lógica y Flujo del Journey de Dart de Coddy — lección 28 de 65.

Al trabajar con colecciones Map, a veces necesitas extraer todas las claves o todos los valores por separado. Dart proporciona dos propiedades convenientes para esto: .keys y .values.

La propiedad .keys devuelve un iterable que contiene todas las claves del mapa, mientras que .values devuelve un iterable que contiene todos los valores correspondientes. Estas propiedades son particularmente útiles cuando necesitas procesar claves y valores de forma independiente.

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)

Dado que estas propiedades devuelven iterables en lugar de listas, puedes convertirlos en listas usando .toList() si necesitas funcionalidad específica de listas. Esta separación de claves y valores es especialmente útil cuando necesitas analizar o manipular un aspecto de tus datos independientemente del otro.

challenge icon

Desafío

Fácil

Crea un programa que gestione un sistema de biblioteca digital analizando colecciones de libros y extrayendo información sobre los títulos y sus años de publicación. Tu programa debe:

  1. Leer una entrada de cadena que represente el nombre de la biblioteca
  2. Leer múltiples pares de entradas que representen títulos de libros y sus años de publicación (la entrada terminará cuando recibas "catalog_done")
  3. Crear un Map para almacenar cada título de libro como clave y su año de publicación como valor
  4. Usar la propiedad .keys para extraer todos los títulos de los libros y convertirlos en una List
  5. Usar la propiedad .values para extraer todos los años de publicación y convertirlos en una List
  6. Encontrar el libro más antiguo identificando el año mínimo de los valores
  7. Encontrar el libro más nuevo identificando el año máximo de los valores
  8. Imprimir el análisis de la biblioteca en el formato exacto que se muestra a continuación

Por ejemplo, si el nombre de la biblioteca es "Central Library" y el catálogo incluye "To Kill a Mockingbird" con el año 1960, "1984" con el año 1949, "The Great Gatsby" con el año 1925, "Harry Potter" con el año 1997, tu programa debería mostrar:

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 el nombre de la biblioteca es "University Library" y el catálogo incluye "Pride and Prejudice" con el año 1813, "Moby Dick" con el año 1851, "Brave New World" con el año 1932, tu programa debería mostrar:

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 el nombre de la biblioteca es "Community Library" y el catálogo incluye "The Hobbit" con el año 1937, "Dune" con el año 1965, "Neuromancer" con el año 1984, "The Martian" con el año 2011, "Klara and the Sun" con el año 2021, tu programa debería mostrar:

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

Tu programa debe usar la propiedad .keys para extraer todos los títulos de los libros y la propiedad .values para extraer todos los años de publicación. Convierte ambos iterables en Lists usando .toList(). Calcula el lapso de la colección restando el año más antiguo del año más nuevo. El formato de entrada será: nombre de la biblioteca, luego títulos de libros y años de publicación alternados (como cadenas que deben convertirse a enteros), terminando con "catalog_done".

Hoja de referencia

Usa .keys para extraer todas las claves de un Map y .values para extraer todos los valores:

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)

Convierte iterables en listas usando .toList() para obtener funcionalidad específica de listas:

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

Pruébalo tú mismo

import 'dart:io';

void main() {
  // Leer el nombre de la biblioteca
  String? libraryName = stdin.readLineSync();
  
  // Crear un Map para almacenar títulos de libros y años de publicación
  Map<String, int> bookCatalog = {};
  
  // Leer títulos de libros y años hasta "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: Escribe tu código a continuación
  // Extraer títulos de libros usando la propiedad .keys y convertir a List
  // Extraer años de publicación usando la propiedad .values y convertir a List
  // Encontrar los años más antiguos y más recientes
  // Calcular el lapso de la colección
  // Imprimir el análisis de la biblioteca en el formato requerido
  
  print("Library: $libraryName");
  print("Book Collection Analysis:");
  // Agrega tus declaraciones de salida aquí
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo