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 map'teki tüm anahtarları içeren bir yinelenebilir (iterable) döndürürken, .values özelliği karşılık gelen tüm değerleri içeren bir yinelenebilir döndürür. Bu özellikler, anahtarları ve değerleri bağımsız olarak işlemeniz gerektiğinde özellikle yararlı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.
Görev
KolayKitap koleksiyonlarını analiz ederek kitap başlıkları ve yayın yılları hakkında bilgi çıkaran, dijital bir kütüphane sistemini yöneten bir program oluşturun. Programınız şunları yapmalıdır:
- Kütüphane adını temsil eden bir dize (string) girdisi okuyun
- Kitap başlıklarını ve yayın yıllarını temsil eden birden fazla girdi çifti okuyun (girdi
"catalog_done"ifadesini aldığınızda sona erecektir) - Her kitap başlığını anahtar (key) ve yayın yılını değer (value) olarak saklamak için bir Map oluşturun
- Tüm kitap başlıklarını çıkarmak ve bunları bir List'e dönüştürmek için
.keysözelliğini kullanın - Tüm yayın yıllarını çıkarmak ve bunları bir List'e dönüştürmek için
.valuesözelliğini kullanın - Değerler arasından minimum yılı belirleyerek en eski kitabı bulun
- Değerler arasından maksimum yılı belirleyerek en yeni kitabı bulun
- Kütüphane analizini tam olarak aşağıda gösterilen formatta yazdırın
Örneğin, kütüphane adı "Central Library" ise ve katalogda 1960 yılıyla "To Kill a Mockingbird", 1949 yılıyla "1984", 1925 yılıyla "The Great Gatsby", 1997 yılıyla "Harry Potter" varsa, programınız şu çıktıyı vermelidir:
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 completedEğer kütüphane adı "University Library" ise ve katalogda 1813 yılıyla "Pride and Prejudice", 1851 yılıyla "Moby Dick", 1932 yılıyla "Brave New World" varsa, programınız şu çıktıyı vermelidir:
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 completedEğer kütüphane adı "Community Library" ise ve katalogda 1937 yılıyla "The Hobbit", 1965 yılıyla "Dune", 1984 yılıyla "Neuromancer", 2011 yılıyla "The Martian", 2021 yılıyla "Klara and the Sun" varsa, programınız şu çıktıyı vermelidir:
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 completedProgramı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 yinelenebilir yapıyı (iterable) .toList() kullanarak List'e dönüştürün. En yeni yıldan en eski yılı çıkararak koleksiyon süresini (collection span) hesaplayın. Giriş formatı şu şekilde olacaktır: kütüphane adı, ardından sırasıyla kitap başlıkları ve yayın yılları (tam sayıya dönüştürülmesi gereken dizeler olarak) ve "catalog_done" ile biter.
Kopya kağıdı
Bir Map'ten tüm anahtarları almak için .keys ve tüm değerleri almak için .values kullanın:
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)Listeye özgü işlevsellik için .toList() kullanarak yinelenebilirleri (iterables) listelere dönüştürün:
List<String> namesList = inventory.keys.toList();
List<double> pricesList = inventory.values.toList();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
}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
1İleri Düzey Liste İşlemleri
Liste Özellikleri: first & lastListe Durumu: isEmpty & isNotEmptyBir Listeyi Tersine ÇevirmeListeye Ekleme: insertListeden Silme: removeWhereListede Bulma: indexOfBir Listeyi SıralamaBir Listeyi KarıştırmaÖzet - Liste Düzenleyici4İleri Seviye Map İşlemleri
Map Üzerinde GezinmeAnahtar ve Değer KontrolüMap Özellikleri: keys & valuesKoşullu Ekleme: putIfAbsentMap'ten Öge Kaldırmaİç İçe Map'lerÖzet - Envanter Güncelleme7İleri Seviye Fonksiyonlar
Anonim FonksiyonlarFonksiyonları Argüman Olarak AktarmaClosure'ları AnlamakÖzyinelemeye GirişÖzyinelemeli Fonksiyon: Geri SayımÖzyinelemeli Fonksiyon: FaktöriyelÖzet - Liste İşleyici10Son Meydan Okumalar
Meydan Okuma: Not SıralayıcıMeydan Okuma: Sesli Harf SayacıMeydan Okuma: FizzBuzz2Fonksiyonel Liste İşlemleri
'map' ile Dönüştürme'where' ile Filtreleme'.toList()' Kullanımı'any' ile Koşul Kontrolü'every' ile Koşullar'firstWhere' ile BulmaÖzet - Veri Filtreleme5Proje: Alışveriş Sepeti Hesaplayıcı
Proje KurulumuSepete Ürün Ekleme3Kümeler
Küme Nedir?Küme OluşturmaKümelere Eleman Ekleme ve ÇıkarmaKüme İçinde Eleman KontrolüListeyi Kümeye DönüştürmeKüme BirleşimiKüme KesişimiKüme FarkıÖzet - Benzersiz Davetli Listesi