Menu
Coddy logo textTech

Map Özellikleri: keys & values

Coddy'nin Dart Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 28 / 65.

Map koleksiyonları ile çalışırken, bazen tüm anahtarları veya tüm değerleri ayrı ayrı çıkarmanız gerekir. Dart bunun için iki kullanışlı özellik sunar: .keys ve .values.

.keys özelliği, haritadaki tüm anahtarları içeren yinelenebilir bir nesne döndürürken .values, karşılık gelen tüm değerleri içeren yinelenebilir bir nesne döndürür. Bu özellikler, anahtarları ve değerleri bağımsız olarak işlemeniz gerektiğinde özellikle kullanışlıdır.

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)

Bu özellikler listeler yerine yinelenebilirler (iterables) döndürdüğü için, listeye özgü işlevselliğe ihtiyacınız varsa .toList() kullanarak bunları listelere dönüştürebilirsiniz. Anahtarların ve değerlerin bu şekilde ayrılması, verilerinizin bir yönünü diğerinden bağımsız olarak analiz etmeniz veya işlemeniz gerektiğinde özellikle yararlıdır.

challenge icon

Görev

Kolay

Kitap koleksiyonlarını analiz ederek başlıklar ve yayın yılları hakkında bilgi çıkaran bir dijital kütüphane sistemini yöneten bir program oluştur. Programın şunları yapması gerekir:

  1. Kütüphane adını temsil eden bir dize girdisini oku
  2. Kitap başlıklarını ve yayın yıllarını temsil eden birden çok girdi çifti oku (girdi, "catalog_done" alınca sona erecektir)
  3. Her kitap başlığını anahtar ve yayın yılını değer olarak depolamak için bir Map oluştur
  4. Tüm kitap başlıklarını çıkarmak ve bunları bir List'e dönüştürmek için .keys özelliğini kullan
  5. Tüm yayın yıllarını çıkarmak ve bunları bir List'e dönüştürmek için .values özelliğini kullan
  6. Değerler arasındaki en küçük yılı belirleyerek en eski kitabı bul
  7. Değerler arasındaki en büyük yılı belirleyerek en yeni kitabı bul
  8. Aşağıda gösterilen tam biçimde kütüphane analizini yazdır

Örneğin, kütüphane adı "Central Library" ise ve katalogda yılı "To Kill a Mockingbird" olan 1960, yılı "1984" olan 1949, yılı "The Great Gatsby" olan 1925 ve yılı "Harry Potter" olan 1997 bulunuyorsa programınız şunu çıktılar:

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

Kütüphane adı "University Library" ise ve katalogda yılı "Pride and Prejudice" olan 1813, yılı "Moby Dick" olan 1851 ve yılı "Brave New World" olan 1932 bulunuyorsa programınız şunu çıktılar:

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

Kütüphane adı "Community Library" ise ve katalogda yılı "The Hobbit" olan 1937, yılı "Dune" olan 1965, yılı "Neuromancer" olan 1984, yılı "The Martian" olan 2011 ve yılı "Klara and the Sun" olan 2021 bulunuyorsa programınız şunu çıktılar:

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

Programınız, tüm kitap başlıklarını çıkarmak için .keys özelliğini ve tüm yayın yıllarını çıkarmak için .values özelliğini kullanmalıdır. Her iki iterable'ı da .toList() kullanarak List'lere dönüştürün. En yeni yıldan en eski yılı çıkararak koleksiyon aralığını hesaplayın. Girdi biçimi şu şekilde olacaktır: kütüphane adı, ardından dönüşümlü olarak kitap başlıkları ve yayın yılları (tam sayılara dönüştürülmesi gereken dizeler olarak) ve son olarak "catalog_done".

Kendin dene

import 'dart:io';

void main() {
  // Kütüphane adını oku
  String? libraryName = stdin.readLineSync();
  
  // Kitap başlıklarını ve yayın yıllarını saklamak için bir Map oluştur
  Map<String, int> bookCatalog = {};
  
  // "catalog_done" gelene kadar kitap başlıklarını ve yıllarını oku
  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: Kodunuzu aşağıya yazın
  // .keys özelliğini kullanarak kitap başlıklarını çıkarın ve List'e dönüştürün
  // .values özelliğini kullanarak yayın yıllarını çıkarın ve List'e dönüştürün
  // En eski ve en yeni yılları bulun
  // Koleksiyon süresini hesaplayın
  // Kütüphane analizini istenen formatta yazdırın
  
  print("Library: $libraryName");
  print("Book Collection Analysis:");
  // Çıktı ifadelerinizi buraya ekleyin
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık & Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online Dart derleyicisi