Set in Dart 

Set في Dart: الشرح المفصل والفوائد ومواضع الاستخدام مع أمثلة متعددة


ما هو Set؟

  • Set هي مجموعة غير مرتبة من العناصر الفريدة في Dart.
  • لا تسمح المجموعة بتكرار العناصر.
  • يمكن أن تحتوي على أنواع بيانات مختلفة (أرقام، نصوص، أو كائنات).

تعريف Set في Dart

إنشاء Set فارغ

void main() {
  Set<int> mySet = {};
  print(mySet); // {}
}
Dart

إنشاء Set باستخدام عناصر

void main() {
  Set<String> fruits = {'Apple', 'Banana', 'Mango'};
  print(fruits); // {Apple, Banana, Mango}
}
Dart

ملاحظة: إذا لم تحدد النوع، يعتبر Dart المجموعة من نوع Set<dynamic>.


الفرق بين Set و List

الخاصيةSetList
ترتيب العناصرغير مرتبمرتب
العناصر المكررةلا يسمحيسمح
الوصول بالعناوين (Index)غير مدعوممدعوم

فوائد استخدام Set

  • التأكد من عدم تكرار العناصر: Set تمنع تكرار البيانات تلقائيًا.
  • أداء أسرع: عمليات البحث والإضافة تكون أسرع مقارنة بـ List عندما يكون الحجم كبيرًا.
  • مرونة عالية: مثالية لتمثيل مجموعات بيانات فريدة مثل أسماء المستخدمين أو عناصر القائمة المميزة.

العمليات الأساسية على Set

1. إضافة عناصر

  • باستخدام add() أو {} مباشرة.
مثال:
void main() {
  Set<int> numbers = {1, 2, 3};
  numbers.add(4); // إضافة عنصر جديد
  print(numbers); // {1, 2, 3, 4}
}
Dart

2. إزالة العناصر

  • باستخدام remove().
مثال:
void main() {
  Set<String> colors = {'Red', 'Green', 'Blue'};
  colors.remove('Green');
  print(colors); // {Red, Blue}
}
Dart
  • إزالة جميع العناصر باستخدام clear():
void main() {
  Set<int> numbers = {1, 2, 3};
  numbers.clear();
  print(numbers); // {}
}
Dart

3. التحقق من وجود عنصر

  • باستخدام contains().
مثال:
void main() {
  Set<String> names = {'Ali', 'Sara', 'Omar'};
  print(names.contains('Ali')); // true
  print(names.contains('Ahmed')); // false
}
Dart

4. الحجم (عدد العناصر)

  • باستخدام length.
مثال:
void main() {
  Set<int> numbers = {10, 20, 30};
  print('عدد العناصر: ${numbers.length}'); // 3
}
Dart

5. التكرار على العناصر

  • باستخدام forEach() أو for-in.
مثال باستخدام for-in:
void main() {
  Set<String> fruits = {'Apple', 'Banana', 'Mango'};

  for (var fruit in fruits) {
    print('الفاكهة: $fruit');
  }
}
Dart
مثال باستخدام forEach():
void main() {
  Set<int> numbers = {1, 2, 3, 4};

  numbers.forEach((num) {
    print('الرقم: $num');
  });
}
Dart

6. العمليات الرياضية على Set

أ) الاتحاد (union)
  • يجمع العناصر من مجموعتين دون تكرار.
void main() {
  Set<int> set1 = {1, 2, 3};
  Set<int> set2 = {3, 4, 5};

  var unionSet = set1.union(set2);
  print('الاتحاد: $unionSet'); // {1, 2, 3, 4, 5}
}
Dart
ب) التقاطع (intersection)
  • يعيد العناصر المشتركة بين مجموعتين.
void main() {
  Set<int> set1 = {1, 2, 3, 4};
  Set<int> set2 = {3, 4, 5, 6};

  var intersectionSet = set1.intersection(set2);
  print('التقاطع: $intersectionSet'); // {3, 4}
}
Dart
ج) الفرق (difference)
  • يعيد العناصر التي توجد في المجموعة الأولى ولا توجد في الثانية.
void main() {
  Set<int> set1 = {1, 2, 3, 4};
  Set<int> set2 = {3, 4, 5};

  var differenceSet = set1.difference(set2);
  print('الفرق: $differenceSet'); // {1, 2}
}
Dart

مواضع استخدام Set

  1. التأكد من عدم تكرار العناصر: مثل أسماء المستخدمين أو معرفات المنتجات.
  2. العمليات الرياضية على البيانات: مثل الاتحاد والتقاطع بين مجموعات بيانات.
  3. التصفية: عندما تحتاج إلى إزالة العناصر المكررة تلقائيًا.
  4. تحسين الأداء: في عمليات البحث والتحقق.

نصائح عامة

  • عند الحاجة إلى بيانات فريدة وغير مرتبة، يُفضل استخدام Set بدلاً من List.
  • لتجنب الأخطاء في العمليات على المجموعات، تأكد دائمًا من أنك تستخدم دوال متوافقة مع طبيعة Set.