Menu
Coddy logo textTech

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 listas. Essa separação entre chaves e valores é especialmente útil quando você precisa analisar ou manipular um aspecto dos seus dados independentemente do outro.

challenge icon

Desafio

Fácil

Crie 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:

  1. Ler uma entrada de texto que represente o nome da biblioteca
  2. Ler vários pares de entradas que representem títulos de livros e seus anos de publicação (a entrada terminará quando você receber "catalog_done")
  3. Criar um Map para armazenar cada título de livro como chave e seu ano de publicação como valor
  4. Usar a propriedade .keys para extrair todos os títulos de livros e convertê-los em uma Lista
  5. Usar a propriedade .values para extrair todos os anos de publicação e convertê-los em uma Lista
  6. Encontrar o livro mais antigo identificando o ano mínimo entre os valores
  7. Encontrar o livro mais novo identificando o ano máximo entre os valores
  8. 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 deverá produzir:

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

Se 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 deverá produzir:

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

Se 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 deverá produzir:

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

Seu programa deve usar a propriedade .keys para extrair todos os títulos de livros e a propriedade .values para extrair todos os anos de publicação. Converta os dois iteráveis em Listas usando .toList(). Calcule o intervalo da coleção subtraindo o ano mais antigo do ano mais novo. O formato da entrada será: nome da biblioteca, seguido por títulos de livros e anos de publicação alternados (como strings que precisam ser convertidas em inteiros), terminando com "catalog_done".

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
}
quiz iconTeste seus conhecimentos

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

Pratique por conta própria: Compilador de Dart online