Propriedades do Map: keys & values
Parte da seção Lógica & Fluxo do Journey de Dart da Coddy — lição 28 de 65.
Ao trabalhar com coleções Map, às vezes você precisa extrair todas as chaves ou todos os valores separadamente. O Dart fornece duas propriedades convenientes para isso: .keys e .values.
A propriedade .keys retorna um iterável contendo todas as chaves do mapa, enquanto .values retorna um iterável contendo todos os valores correspondentes. Essas propriedades são particularmente úteis quando você precisa processar chaves e valores de forma independente.
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)Como essas propriedades retornam iteráveis em vez de listas, você pode convertê-las em listas usando .toList() se precisar de funcionalidades específicas de lista. Essa separação de chaves e valores é especialmente útil quando você precisa analisar ou manipular um aspecto dos seus dados independentemente do outro.
Desafio
FácilCrie um programa que gerencie um sistema de biblioteca digital analisando coleções de livros e extraindo informações sobre títulos e seus anos de publicação. Seu programa deve:
- Ler uma entrada de string representando o nome da biblioteca
- Ler múltiplos pares de entradas representando títulos de livros e seus anos de publicação (a entrada terminará quando você receber
"catalog_done") - Criar um Map para armazenar cada título de livro como a chave e seu ano de publicação como o valor
- Usar a propriedade
.keyspara extrair todos os títulos dos livros e convertê-los em uma List - Usar a propriedade
.valuespara extrair todos os anos de publicação e convertê-los em uma List - Encontrar o livro mais antigo identificando o ano mínimo dos valores
- Encontrar o livro mais novo identificando o ano máximo dos valores
- Imprimir a análise da biblioteca no formato exato mostrado abaixo
Por exemplo, se o nome da biblioteca for "Central Library" e o catálogo incluir "To Kill a Mockingbird" com o ano 1960, "1984" com o ano 1949, "The Great Gatsby" com o ano 1925, "Harry Potter" com o ano 1997, seu programa deve exibir:
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 o nome da biblioteca for "University Library" e o catálogo incluir "Pride and Prejudice" com o ano 1813, "Moby Dick" com o ano 1851, "Brave New World" com o ano 1932, seu programa deve exibir:
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 o nome da biblioteca for "Community Library" e o catálogo incluir "The Hobbit" com o ano 1937, "Dune" com o ano 1965, "Neuromancer" com o ano 1984, "The Martian" com o ano 2011, "Klara and the Sun" com o ano 2021, seu programa deve exibir:
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 completedSeu programa deve usar a propriedade .keys para extrair todos os títulos dos livros e a propriedade .values para extrair todos os anos de publicação. Converta ambos os iteráveis para Lists usando .toList(). Calcule o intervalo da coleção subtraindo o ano mais antigo do ano mais novo. O formato de entrada será: nome da biblioteca, depois títulos de livros e anos de publicação alternados (como strings que precisam ser convertidas para inteiros), terminando com "catalog_done".
Folha de consulta
Use .keys para extrair todas as chaves de um Map e .values para extrair todos os 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)Converta iteráveis em listas usando .toList() para funcionalidades específicas de lista:
List<String> namesList = inventory.keys.toList();
List<double> pricesList = inventory.values.toList();Experimente você mesmo
import 'dart:io';
void main() {
// Ler o nome da biblioteca
String? libraryName = stdin.readLineSync();
// Criar um Map para armazenar títulos de livros e anos de publicação
Map<String, int> bookCatalog = {};
// Ler títulos e anos dos livros até "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: Escreva seu código abaixo
// Extrair títulos dos livros usando a propriedade .keys e converter para List
// Extrair anos de publicação usando a propriedade .values e converter para List
// Encontrar os anos mais antigo e mais novo
// Calcular o intervalo da coleção
// Imprimir a análise da biblioteca no formato exigido
print("Library: $libraryName");
print("Book Collection Analysis:");
// Adicione suas instruções de saída aqui
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica & Fluxo
1Manipulação Avançada de Listas
Propriedades de Lista: first & lastEstado da Lista: isEmpty & isNotEmptyInvertendo uma ListaAdicionando a uma Lista: insertRemoção em Listas: removeWhereBuscando em uma Lista: indexOfOrdenando uma ListaEmbaralhando uma ListaRecapitulação - Organizador de Listas4Manipulação Avançada de Mapas
Iterando sobre um MapVerificando Chaves e ValoresPropriedades do Map: keys & valuesAdição Condicional: putIfAbsentRemovendo Entradas de um MapMaps AninhadosRecapitulação - Atualização de Inventário2Operações Funcionais em Listas
Transformando com 'map'Filtrando com 'where'Usando '.toList()'Verificando Condições com 'any'Condições com 'every'Encontrando com 'firstWhere'Recapitulação - Filtragem de Dados5Projeto: Cálculo de Carrinho de Compras
Configuração do ProjetoAdicionando Itens ao Carrinho3Conjuntos
O que é um Conjunto?Criando um ConjuntoAdicionando e Removendo de ConjuntosVerificando Elementos em um ConjuntoConvertendo uma Lista para um ConjuntoUnião de ConjuntosInterseção de ConjuntosDiferença de ConjuntosRecapitulação - Lista de Convidados Únicos