Menu
Coddy logo textTech

Listeyi Kümeye Dönüştürme

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

Set'in en pratik uygulamalarından biri, bir List içindeki yinelenen öğeleri kaldırmaktır. Kümeler yinelenenleri otomatik olarak elediğinden, tekrarlanan değerlere sahip bir listeyi kolayca benzersiz öğelerden oluşan bir koleksiyona dönüştürebilirsiniz.

Bir List nesnesini bir Set nesnesine dönüştürmek için, listeyi Set.from() kurucusuna iletmeniz yeterlidir. Bu, orijinal listedeki tüm benzersiz öğeleri içeren yeni bir küme oluşturur.

List<int> numbersWithDuplicates = [1, 2, 2, 3, 3, 3, 4, 5, 5];
Set<int> uniqueNumbers = Set.from(numbersWithDuplicates);

print(uniqueNumbers);  // {1, 2, 3, 4, 5}

Eğer sonucu bir List olarak geri almanız gerekiyorsa (belki de kodunuzun diğer kısımlarıyla uyumluluğu korumak için), toList() kullanarak seti tekrar bir listeye dönüştürebilirsiniz. Bu size, orijinalinden yalnızca benzersiz öğeleri içeren bir liste verir.

List<int> uniqueList = Set.from(numbersWithDuplicates).toList();
print(uniqueList);  // [1, 2, 3, 4, 5]

Liste → Küme → Liste şeklindeki bu desen, verileri daha fazla işlem için liste yapısını korurken yinelenenleri kaldırarak temizlemeniz gerektiğinde son derece yaygındır.

challenge icon

Görev

Kolay

Anket yanıtlarındaki yinelenen girdileri kaldırarak bir veri temizleme sistemini yöneten bir program oluştur. Programın şunları yapması gerekir:

  1. Anket başlığını temsil eden bir dize girdisi oku
  2. Anket yanıtlarını temsil eden birden çok dize girdisi oku (girdi, "responses_done" alındığında sona erecek)
  3. Tüm özgün yanıtları (yinelenenler dahil) depolamak için bir List oluştur
  4. Listeyi bir Set'e dönüştürmek ve yinelenenleri otomatik olarak kaldırmak için Set.from() kullan
  5. Set'i benzersiz yanıtların bulunduğu bir List'e geri dönüştürmek için toList() kullan
  6. Veri temizleme sonuçlarını aşağıda gösterilen tam biçimde yazdır

Örneğin, anket başlığı "Customer Satisfaction Survey" ve yanıtlar "Excellent", "Good", "Excellent", "Fair", "Good", "Excellent", "Poor" ise programın çıktısı şöyle olmalıdır:

Survey: Customer Satisfaction Survey
Original responses: [Excellent, Good, Excellent, Fair, Good, Excellent, Poor]
Total responses collected: 7
Converting to Set to remove duplicates...
Unique responses (Set): {Excellent, Good, Fair, Poor}
Converting back to List...
Cleaned responses: [Excellent, Good, Fair, Poor]
Duplicates removed: 3
Final unique responses: 4
Status: Data cleaning completed successfully

Anket başlığı "Product Feedback" ve yanıtlar "Like", "Dislike", "Like", "Like" ise programın çıktısı şöyle olmalıdır:

Survey: Product Feedback
Original responses: [Like, Dislike, Like, Like]
Total responses collected: 4
Converting to Set to remove duplicates...
Unique responses (Set): {Like, Dislike}
Converting back to List...
Cleaned responses: [Like, Dislike]
Duplicates removed: 2
Final unique responses: 2
Status: Data cleaning completed successfully

Anket başlığı "Event Rating" ve yanıtlar "Amazing", "Okay", "Great" ise programın çıktısı şöyle olmalıdır:

Survey: Event Rating
Original responses: [Amazing, Okay, Great]
Total responses collected: 3
Converting to Set to remove duplicates...
Unique responses (Set): {Amazing, Okay, Great}
Converting back to List...
Cleaned responses: [Amazing, Okay, Great]
Duplicates removed: 0
Final unique responses: 3
Status: Data cleaning completed successfully

Programın eksiksiz List → Set → List desenini göstermesi gerekir. Önce tüm yanıtları bir List içinde depola, ardından List'ten bir Set oluşturmak için Set.from() kullan ve son olarak Set'i bir List'e geri dönüştürmek için toList() kullan. Kaldırılan yinelenenlerin sayısını, özgün toplam sayısından nihai benzersiz sayıyı çıkararak hesapla.

Kendin dene

import 'dart:io';

void main() {
  // Anket başlığını oku
  String? surveyTitle = stdin.readLineSync();
  
  // "responses_done" gelene kadar anket yanıtlarını oku
  List<String> originalResponses = [];
  String? response;
  while ((response = stdin.readLineSync()) != "responses_done") {
    if (response != null) {
      originalResponses.add(response);
    }
  }
  
  // TODO: Kodunuzu aşağıya yazın
  // 1. Listeyi bir Set'e dönüştürmek için Set.from() kullanın (yinelenenleri kaldırır)
  // 2. Set'i tekrar bir List'e dönüştürmek için toList() kullanın
  // 3. Kaldırılan yinelenenleri ve nihai sayıları hesaplayın
  
  // Sonuçları gerekli formatta yazdırın
  print("Survey: $surveyTitle");
  print("Original responses: $originalResponses");
  // Kalan yazdırma ifadelerini 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