📌 دوال sublist() و shuffle() و asMap() في Dart 🚀

في Dart، تحتوي الكائنات مثل List على العديد من الدوال المفيدة لمعالجة البيانات بسهولة.
سنتناول اليوم ثلاث دوال شائعة ومفيدة عند التعامل مع القوائم:

  1. sublist() → استخراج جزء من القائمة.
  2. shuffle() → خلط عناصر القائمة عشوائيًا.
  3. asMap() → تحويل القائمة إلى Map مع مفاتيح رقمية.

🔹 1. sublist() – استخراج جزء من القائمة

🔹 تُستخدم sublist() لإنشاء قائمة فرعية من قائمة رئيسية، بدءًا من فهرس معين إلى فهرس آخر اختياري.

📌 الصيغة العامة:

dartنسختحريرList<T> sublist(int start, [int? end])
  • start → الفهرس الذي يبدأ منه القص.
  • end (اختياري) → الفهرس الذي ينتهي عنده القص (غير مشمول).
  • إذا لم يتم تحديد end، سيتم أخذ العناصر حتى نهاية القائمة.

✨ مثال 1: استخراج جزء من القائمة

dartنسختحريرvoid main() {
  List<String> names = ['Ali', 'Sara', 'Omar', 'Laila', 'Khaled'];

  List<String> part1 = names.sublist(1, 4); // من الفهرس 1 إلى 3
  List<String> part2 = names.sublist(2);    // من الفهرس 2 حتى النهاية

  print(part1); // ['Sara', 'Omar', 'Laila']
  print(part2); // ['Omar', 'Laila', 'Khaled']
}

🔹 الناتج:

cssنسختحرير['Sara', 'Omar', 'Laila']
['Omar', 'Laila', 'Khaled']

📌 ملاحظات:

  • العنصر عند end غير مشمول.
  • إذا لم تحدد end، سيتم أخذ العناصر حتى نهاية القائمة.

🔹 2. shuffle() – خلط عناصر القائمة عشوائيًا

🔹 تُستخدم shuffle() لتغيير ترتيب العناصر في القائمة عشوائيًا.
🔹 التغيير يتم داخل نفس القائمة ولا تُرجع دالة جديدة.

📌 الصيغة العامة:

dartنسختحريرvoid shuffle([Random? random])
  • يمكن تمرير Random لتحديد مصدر العشوائية، لكن غالبًا يتم استخدامها بدون معاملات.

✨ مثال 2: خلط عناصر القائمة عشوائيًا

dartنسختحريرimport 'dart:math'; // مطلوب لاستخدام العشوائية

void main() {
  List<int> numbers = [1, 2, 3, 4, 5];

  numbers.shuffle(); // خلط العناصر عشوائيًا
  print(numbers); 
}

🔹 الناتج (يختلف في كل مرة بسبب العشوائية):

csharpنسختحرير[3, 1, 5, 2, 4]  // مثال على ترتيب عشوائي

📌 ملاحظات:

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

🔹 3. asMap() – تحويل القائمة إلى خريطة (Map)

🔹 تُستخدم asMap() لتحويل قائمة إلى Map حيث تكون المفاتيح هي الفهارس والقيم هي عناصر القائمة.

📌 الصيغة العامة:

dartنسختحريرMap<int, T> asMap()
  • المفتاح (Key) هو الفهرس (int).
  • القيمة (Value) هي العنصر في ذلك الفهرس.

✨ مثال 3: تحويل قائمة إلى Map

dartنسختحريرvoid main() {
  List<String> fruits = ['Apple', 'Banana', 'Cherry'];

  Map<int, String> fruitMap = fruits.asMap();

  print(fruitMap);
}

🔹 الناتج:

cssنسختحرير{0: 'Apple', 1: 'Banana', 2: 'Cherry'}

📌 ملاحظات:

  • الفهارس تصبح المفاتيح (keys) في الخريطة (Map).
  • القيم تبقى كما هي.

✨ مثال 4: استخدام asMap() للحصول على قيم معينة

dartنسختحريرvoid main() {
  List<String> names = ['Ali', 'Sara', 'Omar'];

  Map<int, String> namesMap = names.asMap();

  print(namesMap[1]); // ✅ طباعة العنصر عند الفهرس 1 → 'Sara'
}

🔹 الناتج:

nginxنسختحريرSara

📌 يمكنك الوصول إلى القيم باستخدام الفهارس كالمفاتيح (keys).


🔹 مقارنة بين الدوال الثلاث

الدالةالوظيفةيُرجعيُعدل القائمة الأصلية
sublist(start, [end])استخراج جزء من القائمةقائمة جديدة❌ لا
shuffle()خلط عناصر القائمة عشوائيًاvoid✅ نعم
asMap()تحويل القائمة إلى Mapكائن Map<int, T>❌ لا

🔹 الخلاصة

sublist(start, [end]) لإنشاء قائمة فرعية من قائمة رئيسية.
shuffle() لخلط عناصر القائمة عشوائيًا داخل نفس القائمة.
asMap() لتحويل قائمة إلى Map حيث تكون المفاتيح هي الفهارس والقيم هي العناصر.