🔁 التكرار (Looping) في Map
بـ Dart
مع الشرح الكامل + 3 أمثلة لكل نوع
🧱 أولًا: ما هو الـ Map
؟
Map
هي هيكل بيانات يخزن أزواج من المفاتيح والقيم (key: value).- المفاتيح (keys) لا تتكرر.
- تشبه الكائنات في JavaScript أو الـ dictionary في Python.
مثال:
Map<String, int> ages = {
'Ali': 20,
'Sara': 22,
'Omar': 19,
};
JavaScript🔁 طرق التكرار على Map
:
الطريقة | ماذا تفعل |
---|---|
forEach() | تمرّ على كل عنصر (key & value) |
for-in مع entries | تمرّ على كل key-value باستخدام MapEntry |
for-in على keys أو values | تمرّ فقط على المفاتيح أو القيم |
✅ 1. forEach()
✅
📘 الشرح:
دالة مدمجة في Map
، تمر على كل مفتاح وقيمته.
📌 الصيغة:
map.forEach((key, value) {
// code
});
JavaScript🧪 مثال 1: طباعة الأسماء والأعمار
Map<String, int> ages = {'Ali': 20, 'Sara': 22, 'Omar': 19};
ages.forEach((name, age) {
print('$name is $age years old');
});
JavaScript🧪 مثال 2: زيادة كل قيمة بمقدار 1
Map<String, int> scores = {'Math': 90, 'Science': 85};
scores.forEach((subject, score) {
print('Updated $subject: ${score + 1}');
});
JavaScript🧪 مثال 3: التحقق من عمر محدد
Map<String, int> ages = {'Ali': 18, 'Lina': 21};
ages.forEach((name, age) {
if (age >= 20) {
print('$name is adult');
}
});
JavaScript✅ 2. for-in
مع .entries
📘 الشرح:
map.entries
تُرجع قائمة من MapEntry
تحتوي على key
و value
.
📌 الصيغة:
for (var entry in map.entries) {
print(entry.key);
print(entry.value);
}
JavaScript🧪 مثال 1: طباعة العناصر
Map<String, String> countries = {'EG': 'Egypt', 'SA': 'Saudi Arabia'};
for (var entry in countries.entries) {
print('Code: ${entry.key}, Country: ${entry.value}');
}
JavaScript🧪 مثال 2: تعديل القيم (مثال توضيحي فقط)
Map<String, int> points = {'A': 10, 'B': 20};
for (var entry in points.entries) {
print('${entry.key}: ${entry.value * 2}');
}
JavaScript🧪 مثال 3: التحقق من طول القيم النصية
Map<String, String> users = {
'u1': 'Mohamed',
'u2': 'Ali',
'u3': 'Abdelrahman'
};
for (var entry in users.entries) {
if (entry.value.length > 5) {
print('${entry.value} has a long name');
}
}
JavaScript✅ 3. for-in
على keys
أو values
📘 الشرح:
map.keys
تُرجع كل المفاتيح.map.values
تُرجع كل القيم.
🧪 مثال 1: طباعة جميع المفاتيح
Map<String, int> data = {'x': 1, 'y': 2, 'z': 3};
for (var key in data.keys) {
print('Key: $key');
}
JavaScript🧪 مثال 2: طباعة جميع القيم
Map<String, double> prices = {'apple': 1.5, 'banana': 0.75};
for (var price in prices.values) {
print('Price: $price');
}
JavaScript🧪 مثال 3: الربط بين المفتاح والقيمة يدويًا
Map<String, int> marks = {'Math': 90, 'Physics': 80};
for (var key in marks.keys) {
print('$key => ${marks[key]}');
}
JavaScript📌 ملخص الفرق:
الطريقة | تصل إلى | تدعم الوصول السهل للمفتاح والقيمة؟ | مناسبة لـ |
---|---|---|---|
forEach() | key + value | ✅ | معالجة بسيطة وسريعة |
for-in مع entries | key + value | ✅ | مرونة ووضوح أكثر |
for-in مع keys أو values | أحدهما فقط | ❌ | معالجة جانب واحد فقط (المفاتيح أو القيم) |