Küme Farkı
Coddy'nin Dart Journey'sinin Mantık & Akış bölümünün bir parçası — ders 24 / 65.
Bazen bir Set içinde bulunan ancak diğerinde bulunmayan öğeleri bulmanız gerekir. difference() yöntemi, yalnızca ilk kümede bulunan ancak ikinci kümede bulunmayan öğeleri içeren yeni bir küme oluşturarak bunu çözer.
Bunu kümeler için çıkarma işlemi gibi düşünün - ikinci kümenin tüm elemanlarını birinci kümeden çıkarıyorsunuz. difference() metodu, her iki orijinal kümeyi de değiştirmeden bırakarak, kalan elemanlarla yeni bir küme döndürür.
Set<String> todaysTasks = {'email', 'meeting', 'report', 'calls'};
Set<String> completedTasks = {'email', 'calls'};
Set<String> remainingTasks = todaysTasks.difference(completedTasks);
print(remainingTasks); // {meeting, report}Bu işlem, neyin eksik olduğunu, neyin yapılması gerektiğini veya bir koleksiyonun diğerine kıyasla neyin benzersiz olduğunu bulmak için özellikle yararlıdır. Ortak noktaları bulan kesişimin aksine, fark (difference), bir kümeyi diğerinden farklı kılan unsurları vurgular.
Görev
KolayPlanlanan ancak henüz tamamlanmayan görevleri belirleyerek bir proje yönetim sistemini yöneten bir program oluşturun. Programınız şunları yapmalıdır:
- Proje adını temsil eden bir dize (string) girdisi okuyun
- Planlanan görevleri temsil eden birden fazla dize girdisi okuyun (girdi
"planned_done"aldığınızda sona erecektir) - Tamamlanan görevleri temsil eden birden fazla dize girdisi okuyun (girdi
"completed_done"aldığınızda sona erecektir) - Planlanan görevleri ve tamamlanan görevleri saklamak için iki ayrı Set oluşturun
- Planlanan ancak henüz tamamlanmayan görevleri bulmak için
difference()metodunu kullanın - Proje durum analizini tam olarak aşağıda gösterilen formatta yazdırın
Örneğin, proje adı "Website Launch" ise, planlanan görevler "Design mockups", "Write content", "Setup database", "Test functionality", "Deploy site" ve tamamlanan görevler "Design mockups", "Setup database" ise, programınız şu çıktıyı vermelidir:
Project: Website Launch
Planned tasks: {Design mockups, Write content, Setup database, Test functionality, Deploy site}
Completed tasks: {Design mockups, Setup database}
Remaining tasks: {Write content, Test functionality, Deploy site}
Tasks completed: 2
Tasks remaining: 3
Progress: 40.0% complete
Status: Project in progress - 3 task(s) remainingEğer proje adı "Mobile App Development" ise, planlanan görevler "Create wireframes", "Develop UI", "Implement features" ve tamamlanan görevler "Create wireframes", "Develop UI", "Implement features" ise, programınız şu çıktıyı vermelidir:
Project: Mobile App Development
Planned tasks: {Create wireframes, Develop UI, Implement features}
Completed tasks: {Create wireframes, Develop UI, Implement features}
Remaining tasks: {}
Tasks completed: 3
Tasks remaining: 0
Progress: 100.0% complete
Status: Project completed successfullyEğer proje adı "Marketing Campaign" ise, planlanan görevler "Research target audience", "Create content", "Design graphics", "Launch campaign", "Analyze results" ve tamamlanan görevler "Research target audience" ise, programınız şu çıktıyı vermelidir:
Project: Marketing Campaign
Planned tasks: {Research target audience, Create content, Design graphics, Launch campaign, Analyze results}
Completed tasks: {Research target audience}
Remaining tasks: {Create content, Design graphics, Launch campaign, Analyze results}
Tasks completed: 1
Tasks remaining: 4
Progress: 20.0% complete
Status: Project in progress - 4 task(s) remainingProgramınız, planlanan görevler Set'inde bulunan ancak tamamlanan görevler Set'inde bulunmayan görevleri bulmak için difference() metodunu kullanmalıdır. İlerleme yüzdesini, tamamlanan görevleri toplam planlanan görevlere bölüp 100 ile çarparak ve virgülden sonra 1 basamağa yuvarlayarak hesaplayın. Tüm görevler tamamlanmışsa durum olarak "Project completed successfully" gösterin, aksi takdirde X kalan görev sayısı olmak üzere "Project in progress - X task(s) remaining" gösterin.
Kopya kağıdı
difference() yöntemi, ilk kümede bulunan ancak ikinci kümede bulunmayan öğeleri içeren yeni bir küme oluşturur:
Set<String> todaysTasks = {'email', 'meeting', 'report', 'calls'};
Set<String> completedTasks = {'email', 'calls'};
Set<String> remainingTasks = todaysTasks.difference(completedTasks);
print(remainingTasks); // {meeting, report}Bu işlem kümeler için çıkarma işlemi gibidir - ikinci kümenin tüm öğelerini ilk kümeden çıkarır, her iki orijinal kümeyi de değiştirmeden kalan öğelerle yeni bir küme döndürür.
Kendin dene
import 'dart:io';
void main() {
// Proje adını oku
String? projectName = stdin.readLineSync();
// "planned_done" gelene kadar planlanan görevleri oku
Set<String> plannedTasks = <String>{};
String? task;
while ((task = stdin.readLineSync()) != "planned_done") {
if (task != null) {
plannedTasks.add(task);
}
}
// "completed_done" gelene kadar tamamlanan görevleri oku
Set<String> completedTasks = <String>{};
while ((task = stdin.readLineSync()) != "completed_done") {
if (task != null) {
completedTasks.add(task);
}
}
// TODO: Kodunuzu aşağıya yazın
// Kalan görevleri bulmak için difference() metodunu kullanın
// İlerleme yüzdesini hesaplayın
// Proje durumunu belirleyin
// Sonuçları yazdır
print("Project: $projectName");
print("Planned tasks: $plannedTasks");
print("Completed tasks: $completedTasks");
// Kalan çıktı ifadelerini 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