(2) Map Loop

🔁 التكرار (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 مع entrieskey + valueمرونة ووضوح أكثر
for-in مع keys أو valuesأحدهما فقطمعالجة جانب واحد فقط (المفاتيح أو القيم)