Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

تقاطع المجموعات

جزء من قسم Logic & Flow في رحلة Dart على Coddy — الدرس 23 من 65.

عندما تحتاج إلى العثور على العناصر الموجودة في كلتا مجموعتي Set، توفر الطريقة intersection() الحل الأمثل. تحدد هذه العملية العناصر المشتركة بين مجموعتين، مما يؤدي إلى إنشاء مجموعة جديدة تحتوي فقط على العناصر التي تظهر في كلتا المجموعتين الأصليتين.

تعمل طريقة intersection() من خلال مقارنة عناصر مجموعتين وإرجاع مجموعة جديدة تحتوي فقط على القيم المشتركة. ومثل عمليات المجموعات الأخرى، فإنها تتعامل تلقائياً مع التفرد، لذا يظهر كل عنصر مشترك مرة واحدة فقط في النتيجة.

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

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

هذه العملية مفيدة بشكل خاص للعثور على التداخلات في البيانات، مثل الاهتمامات المشتركة بين المستخدمين، أو المهارات المشتركة في الفرق، أو معايير المطابقة في عمليات التصفية. يساعدك التقاطع (intersection) على تحديد ما تشترك فيه مجموعتان، مما يجعلها قيمة لمهام المقارنة والتحليل.

challenge icon

التحدي

سهل

قم بإنشاء برنامج يدير منصة تواصل اجتماعي من خلال العثور على الاتصالات المشتركة بين مستخدمين اثنين. يجب على برنامجك القيام بما يلي:

  1. قراءة مدخل نصي (string) يمثل اسم المستخدم الأول
  2. قراءة مدخلات نصية متعددة تمثل اتصالات المستخدم الأول (سينتهي الإدخال عندما تتلقى "user1_done")
  3. قراءة مدخل نصي يمثل اسم المستخدم الثاني
  4. قراءة مدخلات نصية متعددة تمثل اتصالات المستخدم الثاني (سينتهي الإدخال عندما تتلقى "user2_done")
  5. إنشاء مجموعتين (Sets) منفصلتين لتخزين اتصالات كل مستخدم
  6. استخدام التابع intersection() للعثور على الاتصالات المشتركة بين كلا المستخدمين
  7. طباعة نتائج تحليل الاتصال بالتنسيق الدقيق الموضح أدناه

على سبيل المثال، إذا كان المستخدم الأول هو "Alice" مع الاتصالات "Bob"، و "Charlie"، و "Diana"، و "Eve"، وكان المستخدم الثاني هو "Bob" مع الاتصالات "Alice"، و "Charlie"، و "Frank"، و "Diana"، فيجب أن يخرج برنامجك ما يلي:

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

إذا كان المستخدم الأول هو "Sarah" مع الاتصالات "John"، و "Mike"، و "Lisa"، وكان المستخدم الثاني هو "Tom" مع الاتصالات "Emma"، و "David"، و "Kate"، فيجب أن يخرج برنامجك ما يلي:

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

إذا كان المستخدم الأول هو "Emma" مع الاتصالات "Alex"، و "Jordan"، و "Taylor"، و "Morgan"، وكان المستخدم الثاني هو "Jordan" مع الاتصالات "Emma"، و "Taylor"، و "Casey"، فيجب أن يخرج برنامجك ما يلي:

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

يجب أن يستخدم برنامجك التابع intersection() للعثور على الاتصالات المشتركة بين مجموعتي المستخدمين. حدد قوة الاتصال بناءً على عدد الاتصالات المشتركة: "None" لـ 0 من الاتصالات المشتركة، و "Weak" لاتصال مشترك واحد بالضبط، و "Strong" لاتصالين مشتركين أو أكثر. إذا كانت هناك اتصالات مشتركة، فأظهر "Users have mutual connections" كحالة (status)، وإلا فأظهر "Users have no mutual connections".

ورقة مرجعية

تجد الطريقة intersection() العناصر المشتركة بين مجموعتين، وتعيد مجموعة جديدة تحتوي فقط على القيم المشتركة:

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

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

تتعامل هذه العملية تلقائياً مع التفرد وهي مفيدة للعثور على التداخلات في البيانات، مثل الاهتمامات المشتركة، أو المهارات المشتركة، أو معايير المطابقة في عمليات التصفية.

جرّب بنفسك

import 'dart:io';

void main() {
  // قراءة اسم المستخدم الأول
  String? user1Name = stdin.readLineSync();
  
  // قراءة اتصالات المستخدم الأول حتى "user1_done"
  Set<String> user1Connections = <String>{};
  String? connection;
  while ((connection = stdin.readLineSync()) != "user1_done") {
    if (connection != null) {
      user1Connections.add(connection);
    }
  }
  
  // قراءة اسم المستخدم الثاني
  String? user2Name = stdin.readLineSync();
  
  // قراءة اتصالات المستخدم الثاني حتى "user2_done"
  Set<String> user2Connections = <String>{};
  while ((connection = stdin.readLineSync()) != "user2_done") {
    if (connection != null) {
      user2Connections.add(connection);
    }
  }
  
  // TODO: اكتب الكود الخاص بك أدناه
  // العثور على الاتصالات المشتركة باستخدام طريقة intersection()
  // تحديد قوة الاتصال بناءً على عدد الاتصالات المشتركة
  // إنشاء تنسيق الإخراج المطلوب
  
  // طباعة نتائج التحليل
  print("User Analysis: Finding mutual connections");
  // أضف بيانات الإخراج الخاصة بك هنا
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow