Menu
CoddyTech

Properti Map: kunci dan nilai

Termasuk bagian Logika dan Alur dalam perjalanan Dart di Coddy. Pelajaran 28 dari 65.

Saat bekerja dengan koleksi Map, terkadang kamu perlu mengambil semua kunci atau semua nilai secara terpisah. Dart menyediakan dua property yang praktis untuk ini: .keys dan .values.

Property .keys mengembalikan objek yang dapat diiterasi berisi semua kunci dari map, sedangkan .values mengembalikan objek yang dapat diiterasi berisi semua nilai yang sesuai. Property ini sangat berguna saat kamu perlu memproses kunci dan nilai secara terpisah.

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)

Karena property ini mengembalikan iterable, bukan list, kamu bisa mengubahnya menjadi list menggunakan .toList() jika kamu memerlukan fungsi khusus untuk list. Pemisahan kunci dan nilai ini sangat membantu saat kamu perlu menganalisis atau memanipulasi salah satu aspek datamu secara terpisah dari aspek lainnya.

challenge icon

Tantangan

Mudah

Buat program yang mengelola sistem perpustakaan digital dengan menganalisis koleksi buku dan mengambil informasi tentang judul serta tahun terbitnya. Programmu harus:

  1. Membaca input string yang mewakili nama perpustakaan
  2. Membaca beberapa pasang input yang mewakili judul buku dan tahun terbitnya (input akan berakhir saat kamu menerima "catalog_done")
  3. Membuat Map untuk menyimpan setiap judul buku sebagai kunci dan tahun terbitnya sebagai nilai
  4. Menggunakan property .keys untuk mengambil semua judul buku dan mengubahnya menjadi List
  5. Menggunakan property .values untuk mengambil semua tahun terbit dan mengubahnya menjadi List
  6. Menemukan buku tertua dengan mencari tahun minimum dari nilai-nilai tersebut
  7. Menemukan buku terbaru dengan mencari tahun maksimum dari nilai-nilai tersebut
  8. Mencetak analisis perpustakaan dalam format persis seperti yang ditunjukkan di bawah ini

Misalnya, jika nama perpustakaannya adalah "Central Library" dan katalognya mencakup "To Kill a Mockingbird" dengan tahun 1960, "1984" dengan tahun 1949, "The Great Gatsby" dengan tahun 1925, dan "Harry Potter" dengan tahun 1997, programmu harus menghasilkan:

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

Jika nama perpustakaannya adalah "University Library" dan katalognya mencakup "Pride and Prejudice" dengan tahun 1813, "Moby Dick" dengan tahun 1851, dan "Brave New World" dengan tahun 1932, programmu harus menghasilkan:

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

Jika nama perpustakaannya adalah "Community Library" dan katalognya mencakup "The Hobbit" dengan tahun 1937, "Dune" dengan tahun 1965, "Neuromancer" dengan tahun 1984, "The Martian" dengan tahun 2011, dan "Klara and the Sun" dengan tahun 2021, programmu harus menghasilkan:

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

Programmu harus menggunakan property .keys untuk mengambil semua judul buku dan property .values untuk mengambil semua tahun terbit. Ubah kedua iterable menjadi Lists menggunakan .toList(). Hitung rentang koleksi dengan mengurangi tahun tertua dari tahun terbaru. Format inputnya adalah: nama perpustakaan, lalu judul buku dan tahun terbit secara bergantian (sebagai string yang perlu diubah menjadi integer), diakhiri dengan "catalog_done".

Coba sendiri

import 'dart:io';

void main() {
  // Baca nama library
  String? libraryName = stdin.readLineSync();
  
  // Buat Map untuk menyimpan judul buku dan tahun terbit
  Map<String, int> bookCatalog = {};
  
  // Baca judul buku dan tahun terbit hingga "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: Tulis kodemu di bawah ini
  // Ambil judul buku menggunakan property .keys dan ubah menjadi List
  // Ambil tahun terbit menggunakan property .values dan ubah menjadi List
  // Cari tahun terbit paling lama dan paling baru
  // Hitung rentang tahun koleksi
  // Cetak analisis library dalam format yang diminta
  
  print("Library: $libraryName");
  print("Book Collection Analysis:");
  // Tambahkan pernyataan output-mu di sini
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler Dart online