خلط القائمة
جزء من قسم Logic & Flow في رحلة Dart على Coddy — الدرس 8 من 65.
عندما تحتاج إلى جعل ترتيب العناصر في قائمة عشوائياً، توفر لغة Dart التابع shuffle(). يقوم هذا التابع بإعادة ترتيب جميع العناصر في القائمة بشكل عشوائي، مما يؤدي إلى إنشاء ترتيب غير متوقع مثالي للألعاب، أو المحاكاة، أو أي موقف تحتاج فيه إلى ترتيبات عشوائية.
تقوم طريقة shuffle() بتعديل القائمة الأصلية مباشرةً، وتغيير مواقع جميع العناصر بشكل عشوائي. في كل مرة تستدعي فيها shuffle()، ستحصل على ترتيب مختلف لنفس العناصر.
List<String> cards = ['Ace', 'King', 'Queen', 'Jack'];
print('Original: $cards'); // [Ace, King, Queen, Jack]
cards.shuffle();
print('Shuffled: $cards'); // [Queen, Ace, Jack, King] (ترتيب عشوائي)تعد هذه الطريقة مفيدة بشكل خاص لإنشاء ألعاب الورق، أو جعل أسئلة الاختبار عشوائية، أو أي تطبيق تريد فيه عرض العناصر بتسلسل غير متوقع. وبما أن shuffle() تعمل في مكانها، فلن تحتاج إلى إنشاء قائمة جديدة - حيث يتم إعادة تنظيم القائمة الموجودة عشوائياً من أجلك.
التحدي
سهلأنشئ برنامجًا يدير جدول تصفيات بطولة ألعاب من خلال خلط الفرق في مواجهات عشوائية. يجب على برنامجك:
- قراءة مدخل نصي يمثل اسم البطولة (تتم قراءة هذه القيمة ولكن لا يتم طباعتها)
- قراءة مدخلات نصية متعددة تمثل أسماء الفرق (ينتهي الإدخال عند استلام سلسلة نصية فارغة)
- خلط الفرق بترتيب عشوائي
- طباعة اسم كل فريق في سطر منفصل
على سبيل المثال، إذا كان اسم البطولة هو "Local Cup" والفرق هي "Wolves"، "Hawks"، يجب أن يقوم برنامجك بطباعة أسماء الفرق بترتيب مختلط (عشوائي)، اسم واحد في كل سطر:
Hawks
Wolvesأو:
Wolves
Hawksبما أن shuffle() تجعل الترتيب عشوائيًا، فإن أي ترتيب للفرق يعتبر صحيحًا.
ورقة مرجعية
تقوم الطريقة shuffle() بترتيب العناصر في القائمة بشكل عشوائي:
List<String> cards = ['Ace', 'King', 'Queen', 'Jack'];
print('Original: $cards'); // [Ace, King, Queen, Jack]
cards.shuffle();
print('Shuffled: $cards'); // [Queen, Ace, Jack, King] (ترتيب عشوائي)تقوم الطريقة shuffle() بتعديل القائمة الأصلية مباشرة وتنشئ ترتيبًا عشوائيًا مختلفًا في كل مرة يتم استدعاؤها فيها.
جرّب بنفسك
import 'dart:io';
void main() {
// قراءة اسم البطولة
String? tournamentName = stdin.readLineSync();
// قراءة أسماء الفرق حتى يتم إدخال نص فارغ
List<String> teams = [];
String? teamName;
while ((teamName = stdin.readLineSync()) != null && teamName!.isNotEmpty) {
teams.add(teamName);
}
// TODO: قم بتبديل قائمة الفرق عشوائياً للمواجهات العشوائية
// طباعة كل فريق في سطر منفصل
for (String team in teams) {
print(team);
}
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1التعامل المتقدم مع القوائم
خصائص القائمة: first و lastحالة القائمة: isEmpty و isNotEmptyعكس القائمةالإضافة إلى القائمة: insertالحذف من القائمة: removeWhereالبحث في القائمة: indexOfفرز القائمةخلط القائمةملخص - منظم القوائم4معالجة الـ Map المتقدمة
التكرار عبر الـ Mapالتحقق من المفاتيح والقيمخصائص الـ Map: keys و valuesإضافة مشروطة: putIfAbsentإزالة العناصر من الـ Mapالـ Maps المتداخلةمراجعة - تحديث المخزون2عمليات القوائم الوظيفية
التحويل باستخدام 'map'التصفية باستخدام 'where'استخدام '.toList()'التحقق من الشروط باستخدام 'any'الشروط باستخدام 'every'البحث باستخدام 'firstWhere'مراجعة - تصفية البيانات5مشروع: حاسبة عربة التسوق
إعداد المشروعإضافة العناصر إلى العربة3المجموعات
ما هي المجموعة؟إنشاء مجموعةالإضافة والحذف من المجموعاتالتحقق من وجود عناصر في المجموعةتحويل قائمة إلى مجموعةاتحاد المجموعاتتقاطع المجموعاتالفرق بين المجموعاتمراجعة - قائمة ضيوف فريدة