Map'ten Öge Kaldırma
Coddy'nin Dart Journey'sinin Mantık & Akış bölümünün bir parçası — ders 30 / 65.
Bir Map içindeki verileri yönetirken, artık ihtiyaç duyulmayan girişleri sık sık kaldırmanız gerekecektir. remove() yöntemi, anahtarını kullanarak bir map'ten bir anahtar-değer çiftini silmek için doğrudan bir yol sağlar.
remove() yöntemi tek bir parametre alır: silmek istediğiniz girdinin anahtarı. Çağrıldığında, hem anahtarı hem de onunla ilişkili değeri map'ten kaldırır. Eğer anahtar map içinde mevcut değilse, yöntem bir hataya neden olmadan hiçbir şey yapmaz.
Map<String, double> inventory = {
'Laptop': 999.99,
'Mouse': 25.50,
'Keyboard': 75.00
};
// Fareyi envanterden kaldır
inventory.remove('Mouse');
print(inventory); // {Laptop: 999.99, Keyboard: 75.0}
// Var olmayan bir öğeyi kaldırmaya çalışmak hiçbir şey yapmaz
inventory.remove('Tablet');
print(inventory); // {Laptop: 999.99, Keyboard: 75.0}Bu yöntem, uygulamalarınızda temiz ve güncel eşlemeler (maps) sürdürmek için gereklidir. İster envanter, ister kullanıcı verisi veya öğelerin kaldırılması gereken başka bir koleksiyon yönetiyor olun, remove() girişleri anahtarlarına göre silmek için güvenli ve verimli bir yol sağlar.
Görev
KolayŞarkı kitaplıklarını takip ederek ve lisans sorunları nedeniyle artık mevcut olmayan şarkıları kaldırarak dijital bir müzik akış hizmetini yöneten bir program oluşturun. Programınız şunları yapmalıdır:
- Akış hizmeti adını temsil eden bir dize (string) girdisi okuyun
- Şarkı adlarını ve bunların dinlenme sayılarını temsil eden birden fazla girdi çifti okuyun (girdi
"library_done"değerini aldığınızda sona erecektir) - Lisans sorunları nedeniyle kaldırılacak şarkıları temsil eden birden fazla dize girdisi okuyun (girdi
"removal_done"değerini aldığınızda sona erecektir) - Şarkı adlarını anahtar (key) ve dinlenme sayılarını değer (value) olarak saklamak için bir Map oluşturun
- Belirtilen her şarkıyı kitaplıktan kaldırmak için
remove()metodunu kullanın - Kitaplık istatistiklerini hesaplayın ve kaldırma raporunu tam olarak aşağıda gösterilen formatta yazdırın
Örneğin, hizmet adı "MusicStream Pro" ise, kitaplık 2500000 dinlenme ile "Bohemian Rhapsody", 1800000 dinlenme ile "Imagine", 2200000 dinlenme ile "Hotel California", 1900000 dinlenme ile "Stairway to Heaven" şarkılarını içeriyorsa ve kaldırılacak şarkılar "Imagine", "Yesterday", "Hotel California" ise programınız şu çıktıyı vermelidir:
Service: MusicStream Pro
Original Library: {Bohemian Rhapsody: 2500000, Imagine: 1800000, Hotel California: 2200000, Stairway to Heaven: 1900000}
Removal Process:
Removing 'Imagine': Song removed (had 1800000 streams)
Removing 'Yesterday': Song not found in library
Removing 'Hotel California': Song removed (had 2200000 streams)
Updated Library: {Bohemian Rhapsody: 2500000, Stairway to Heaven: 1900000}
Library Statistics:
Songs before removal: 4
Songs after removal: 2
Songs successfully removed: 2
Songs not found: 1
Total streams lost: 4000000
Remaining total streams: 4400000
Status: Library update completedHizmet adı "SoundWave" ise, kitaplık 3200000 dinlenme ile "Shape of You", 2800000 dinlenme ile "Blinding Lights", 2100000 dinlenme ile "Someone Like You" şarkılarını içeriyorsa ve kaldırılacak şarkılar "Blinding Lights", "Perfect" ise programınız şu çıktıyı vermelidir:
Service: SoundWave
Original Library: {Shape of You: 3200000, Blinding Lights: 2800000, Someone Like You: 2100000}
Removal Process:
Removing 'Blinding Lights': Song removed (had 2800000 streams)
Removing 'Perfect': Song not found in library
Updated Library: {Shape of You: 3200000, Someone Like You: 2100000}
Library Statistics:
Songs before removal: 3
Songs after removal: 2
Songs successfully removed: 1
Songs not found: 1
Total streams lost: 2800000
Remaining total streams: 5300000
Status: Library update completedHizmet adı "AudioHub" ise, kitaplık 1500000 dinlenme ile "Bad Guy", 1700000 dinlenme ile "Watermelon Sugar", 1400000 dinlenme ile "Levitating", 1600000 dinlenme ile "Good 4 U" şarkılarını içeriyorsa ve kaldırılacak şarkılar "Bad Guy", "Levitating", "Good 4 U", "Drivers License" ise programınız şu çıktıyı vermelidir:
Service: AudioHub
Original Library: {Bad Guy: 1500000, Watermelon Sugar: 1700000, Levitating: 1400000, Good 4 U: 1600000}
Removal Process:
Removing 'Bad Guy': Song removed (had 1500000 streams)
Removing 'Levitating': Song removed (had 1400000 streams)
Removing 'Good 4 U': Song removed (had 1600000 streams)
Removing 'Drivers License': Song not found in library
Updated Library: {Watermelon Sugar: 1700000}
Library Statistics:
Songs before removal: 4
Songs after removal: 1
Songs successfully removed: 3
Songs not found: 1
Total streams lost: 4500000
Remaining total streams: 1700000
Status: Library update completedProgramınız şarkıları Map'ten silmek için remove() metodunu kullanmalıdır. Hangi şarkıların başarıyla kaldırıldığını ve hangilerinin bulunamadığını takip edin. Başarıyla kaldırılan şarkıların dinlenme sayılarını toplayarak kaybedilen toplam dinlenme sayısını hesaplayın. Girdi formatı şu şekilde olacaktır: hizmet adı, ardından sırasıyla şarkı adları ve dinlenme sayıları (tam sayıya dönüştürülmesi gereken dizeler olarak), "library_done" ile biter, ardından "removal_done" ile biten kaldırılacak şarkı adları gelir.
Kopya kağıdı
remove() yöntemi, anahtarını kullanarak bir Map'ten bir anahtar-değer çiftini siler:
Map<String, double> inventory = {
'Laptop': 999.99,
'Mouse': 25.50,
'Keyboard': 75.00
};
// Anahtara göre girişi kaldır
inventory.remove('Mouse');
print(inventory); // {Laptop: 999.99, Keyboard: 75.0}
// Mevcut olmayan bir anahtarı kaldırmak hiçbir şey yapmaz
inventory.remove('Tablet');
print(inventory); // {Laptop: 999.99, Keyboard: 75.0}Yöntem, hata oluşturmadan mevcut olmayan anahtarları güvenli bir şekilde işler.
Kendin dene
import 'dart:io';
void main() {
// Servis adını oku
String? serviceName = stdin.readLineSync();
// Şarkı adlarını ve dinlenme sayılarını saklamak için bir Map oluştur
Map<String, int> songLibrary = {};
// Şarkı kütüphanesi verilerini oku
while (true) {
String? input = stdin.readLineSync();
if (input == "library_done") break;
String songTitle = input!;
String? streamCountStr = stdin.readLineSync();
int streamCount = int.parse(streamCountStr!);
songLibrary[songTitle] = streamCount;
}
// Kaldırılacak şarkıları oku
List<String> songsToRemove = [];
while (true) {
String? input = stdin.readLineSync();
if (input == "removal_done") break;
songsToRemove.add(input!);
}
// TODO: Kodunuzu aşağıya yazın
// remove() metodunu kullanarak şarkıların kaldırılma işlemini gerçekleştirin
// İstatistikleri takip edin ve gerekli çıktı formatını oluşturun
// Sonuçları istenen formatta yazdırın
// Şunları eklemeyi unutmayın: Servis adı, Orijinal Kütüphane, Kaldırma İşlemi,
// Güncellenmiş Kütüphane ve Kütüphane İstatistikleri
}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