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
الخاصية | Set | List |
---|
ترتيب العناصر | غير مرتب | مرتب |
العناصر المكررة | لا يسمح | يسمح |
الوصول بالعناوين (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. إزالة العناصر
مثال:
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. التحقق من وجود عنصر
مثال:
void main() {
Set<String> names = {'Ali', 'Sara', 'Omar'};
print(names.contains('Ali')); // true
print(names.contains('Ahmed')); // false
}
Dart
4. الحجم (عدد العناصر)
مثال:
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
- التأكد من عدم تكرار العناصر: مثل أسماء المستخدمين أو معرفات المنتجات.
- العمليات الرياضية على البيانات: مثل الاتحاد والتقاطع بين مجموعات بيانات.
- التصفية: عندما تحتاج إلى إزالة العناصر المكررة تلقائيًا.
- تحسين الأداء: في عمليات البحث والتحقق.
نصائح عامة
- عند الحاجة إلى بيانات فريدة وغير مرتبة، يُفضل استخدام
Set
بدلاً من List
.
- لتجنب الأخطاء في العمليات على المجموعات، تأكد دائمًا من أنك تستخدم دوال متوافقة مع طبيعة
Set
.