Menu
Coddy logo textTech

Küme Kesişimi

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

İki Set koleksiyonunun her ikisinde de bulunan öğeleri bulmanız gerektiğinde, intersection() yöntemi mükemmel çözümü sunar. Bu işlem, iki küme arasındaki ortak öğeleri belirleyerek, yalnızca her iki orijinal koleksiyonda da görünen öğeleri içeren yeni bir küme oluşturur.

intersection() yöntemi, iki kümenin öğelerini karşılaştırarak ve yalnızca paylaşılan değerleri içeren yeni bir küme döndürerek çalışır. Diğer küme işlemleri gibi, benzersizliği otomatik olarak yönetir, bu nedenle her ortak öğe sonuçta yalnızca bir kez görünür.

Set<String> aliceFriends = {'Bob', 'Charlie', 'Diana', 'Eve'};
Set<String> bobFriends = {'Alice', 'Charlie', 'Frank', 'Diana'};

Set<String> mutualFriends = aliceFriends.intersection(bobFriends);
print(mutualFriends);  // {Charlie, Diana}

Bu işlem, kullanıcılar arasındaki ortak ilgi alanları, ekiplerdeki paylaşılan beceriler veya filtreleme işlemlerindeki eşleşen kriterler gibi verilerdeki çakışmaları bulmak için özellikle yararlıdır. Kesişim, iki koleksiyonun ortak noktalarını belirlemenize yardımcı olarak karşılaştırma ve analiz görevleri için onu değerli kılar.

challenge icon

Görev

Kolay

İki kullanıcı arasındaki ortak bağlantıları bularak bir sosyal medya platformunu yöneten bir program oluştur. Programın şunları yapması gerekir:

  1. İlk kullanıcının adını temsil eden bir dize girdisi oku
  2. İlk kullanıcının bağlantılarını temsil eden birden çok dize girdisi oku ( "user1_done" alındığında girdi sona erecek)
  3. İkinci kullanıcının adını temsil eden bir dize girdisi oku
  4. İkinci kullanıcının bağlantılarını temsil eden birden çok dize girdisi oku ( "user2_done" alındığında girdi sona erecek)
  5. Her kullanıcının bağlantılarını depolamak için iki ayrı Set oluştur
  6. Her iki kullanıcı arasındaki ortak bağlantıları bulmak için intersection() yöntemini kullan
  7. Bağlantı analizi sonuçlarını aşağıda gösterilen tam biçimde yazdır

Örneğin, ilk kullanıcı bağlantıları "Alice", "Bob", "Charlie", "Diana" olan "Eve" ve ikinci kullanıcı bağlantıları "Bob", "Alice", "Charlie", "Frank" olan "Diana" ise programın çıktısı şöyle olmalıdır:

User Analysis: Finding mutual connections
Alice's connections: {Bob, Charlie, Diana, Eve}
Bob's connections: {Alice, Charlie, Frank, Diana}
Mutual connections: {Charlie, Diana}
Total mutual connections: 2
Connection strength: Strong (2+ mutual connections)
Status: Users have mutual connections

İlk kullanıcı bağlantıları "Sarah", "John", "Mike" olan "Lisa" ve ikinci kullanıcı bağlantıları "Tom", "Emma", "David" olan "Kate" ise programın çıktısı şöyle olmalıdır:

User Analysis: Finding mutual connections
Sarah's connections: {John, Mike, Lisa}
Tom's connections: {Emma, David, Kate}
Mutual connections: {}
Total mutual connections: 0
Connection strength: None (no mutual connections)
Status: Users have no mutual connections

İlk kullanıcı bağlantıları "Emma", "Alex", "Jordan", "Taylor" olan "Morgan" ve ikinci kullanıcı bağlantıları "Jordan", "Emma", "Taylor" olan "Casey" ise programın çıktısı şöyle olmalıdır:

User Analysis: Finding mutual connections
Emma's connections: {Alex, Jordan, Taylor, Morgan}
Jordan's connections: {Emma, Taylor, Casey}
Mutual connections: {Taylor}
Total mutual connections: 1
Connection strength: Weak (1 mutual connection)
Status: Users have mutual connections

Programın, iki kullanıcının Set'leri arasındaki ortak bağlantıları bulmak için intersection() yöntemini kullanması gerekir. Bağlantı gücünü ortak bağlantıların sayısına göre belirle: 0 ortak bağlantı için "None", tam olarak 1 ortak bağlantı için "Weak" ve 2 veya daha fazla ortak bağlantı için "Strong". Ortak bağlantılar varsa durum olarak "Users have mutual connections", aksi takdirde "Users have no mutual connections" göster.

Kendin dene

import 'dart:io';

void main() {
  // İlk kullanıcının adını oku
  String? user1Name = stdin.readLineSync();
  
  // Read first user's connections until "user1_done"
  Set<String> user1Connections = <String>{};
  String? connection;
  while ((connection = stdin.readLineSync()) != "user1_done") {
    if (connection != null) {
      user1Connections.add(connection);
    }
  }
  
  // İkinci kullanıcının adını oku
  String? user2Name = stdin.readLineSync();
  
  // Read second user's connections until "user2_done"
  Set<String> user2Connections = <String>{};
  while ((connection = stdin.readLineSync()) != "user2_done") {
    if (connection != null) {
      user2Connections.add(connection);
    }
  }
  
  // TODO: Kodunuzu aşağıya yazın
  // intersection() metodunu kullanarak ortak bağlantıları bulun
  // Ortak bağlantı sayısına göre bağlantı gücünü belirleyin
  // Gerekli çıktı formatını oluşturun
  
  // Analiz sonuçlarını yazdır
  print("User Analysis: Finding mutual connections");
  // Çı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