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.
Desafío
FácilCrea 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:
- Leer una entrada de cadena que represente el nombre de la biblioteca
- 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") - Crear un Map para almacenar cada título de libro como clave y su año de publicación como valor
- Usar la propiedad
.keyspara extraer todos los títulos de los libros y convertirlos en una List - Usar la propiedad
.valuespara extraer todos los años de publicación y convertirlos en una List - Encontrar el libro más antiguo identificando el año mínimo de los valores
- Encontrar el libro más nuevo identificando el año máximo de los valores
- 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 completedSi 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 completedSi 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 completedTu 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í
}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
1Manipulación avanzada de listas
Propiedades de listas: first y lastEstado de la lista: isEmpty y isNotEmptyInvertir una listaAñadir a una lista: insertEliminación en listas: removeWhereBúsqueda en una lista: indexOfOrdenar una listaMezclar una listaResumen - Organizador de listas4Manipulación avanzada de mapas
Iterar sobre un mapaComprobación de claves y valoresPropiedades del mapa: keys y valuesAdición condicional: putIfAbsentEliminar entradas de un mapaMapas anidadosResumen - Actualización de inventario2Operaciones funcionales con listas
Transformar con 'map'Filtrar con 'where'Uso de '.toList()'Comprobar condiciones con 'any'Condiciones con 'every'Búsqueda con 'firstWhere'Resumen - Filtrado de datos5Proyecto: Calculadora de carrito de compras
Configuración del proyectoAgregar artículos al carrito3Conjuntos
¿Qué es un Conjunto?Crear un ConjuntoAñadir y eliminar elementos de un ConjuntoComprobar elementos en un ConjuntoConvertir una lista en un ConjuntoUnión de ConjuntosIntersección de ConjuntosDiferencia de ConjuntosResumen - Lista de invitados única