فرز القائمة
جزء من قسم Logic & Flow في رحلة Dart على Coddy — الدرس 7 من 65.
عندما تحتاج إلى تنظيم العناصر في قائمة، توفر Dart الـ sort() التي ترتب العناصر بترتيب تصاعدي. هذه الطريقة مفيدة بشكل خاص لترتيب الأسماء أبجديًا أو الأرقام من الأصغر إلى الأكبر.
تقوم طريقة sort() بتعديل القائمة الأصلية مباشرة بدلاً من إنشاء قائمة مرتبة جديدة. عندما تستدعي sort() على قائمة، فإنها تعيد ترتيب العناصر الموجودة في مكانها.
List<String> names = ['Charlie', 'Alice', 'Bob'];
names.sort();
print(names); // ['Alice', 'Bob', 'Charlie']
List<int> scores = [85, 92, 78, 96];
scores.sort();
print(scores); // [78, 85, 92, 96]تعمل طريقة sort() تلقائياً مع أنواع البيانات الشائعة مثل السلاسل النصية والأرقام. بالنسبة للسلاسل النصية، فإنها ترتب أبجدياً، بينما بالنسبة للأرقام، فإنها ترتب من الأصغر إلى الأكبر. وهذا يجعلها أداة مباشرة لتنظيم بياناتك كلما احتجت إلى العناصر بترتيب متوقع.
التحدي
سهلقم بإنشاء برنامج يدير نظام قائمة مطعم من خلال تنظيم الأطباق في فئات مختلفة. يجب على برنامجك القيام بما يلي:
- قراءة مدخل نصي (string) يمثل اسم المطعم
- قراءة مدخلات نصية متعددة تمثل أسماء الأطباق (ينتهي الإدخال عندما تتلقى سلسلة فارغة)
- استخدام طريقة
sort()لترتيب الأطباق ترتيباً أبجدياً - طباعة القائمة المنظمة بالتنسيق الدقيق الموضح أدناه
على سبيل المثال، إذا كان اسم المطعم هو "Bella Vista" والأطباق هي "Pasta Carbonara"، و "Caesar Salad"، و "Grilled Salmon"، و "Apple Pie"، يجب أن يخرج برنامجك ما يلي:
Restaurant: Bella Vista
Original menu: [Pasta Carbonara, Caesar Salad, Grilled Salmon, Apple Pie]
Sorted menu: [Apple Pie, Caesar Salad, Grilled Salmon, Pasta Carbonara]
Total dishes: 4
Status: Menu organized alphabeticallyإذا كان اسم المطعم هو "Quick Bites" والأطباق هي "Burger"، و "Pizza"، و "Sandwich"، يجب أن يخرج برنامجك ما يلي:
Restaurant: Quick Bites
Original menu: [Burger, Pizza, Sandwich]
Sorted menu: [Burger, Pizza, Sandwich]
Total dishes: 3
Status: Menu organized alphabeticallyإذا كان اسم المطعم هو "Cafe Corner" وتم تقديم طبق واحد فقط "Coffee"، يجب أن يخرج برنامجك ما يلي:
Restaurant: Cafe Corner
Original menu: [Coffee]
Sorted menu: [Coffee]
Total dishes: 1
Status: Menu organized alphabeticallyيجب أن يستخدم برنامجك طريقة sort() لترتيب الأطباق أبجدياً. تذكر أن sort() تعدل القائمة الأصلية في مكانها، لذا ستحتاج إلى إنشاء نسخة من القائمة الأصلية قبل الفرز إذا كنت ترغب في عرض كل من النسخة الأصلية والنسخة المرتبة.
ورقة مرجعية
تقوم الطريقة sort() بترتيب عناصر القائمة بترتيب تصاعدي وتعديل القائمة الأصلية مباشرة:
List<String> names = ['Charlie', 'Alice', 'Bob'];
names.sort();
print(names); // ['Alice', 'Bob', 'Charlie']
List<int> scores = [85, 92, 78, 96];
scores.sort();
print(scores); // [78, 85, 92, 96]بالنسبة للسلاسل النصية، تقوم sort() بترتيب العناصر أبجديًا. وبالنسبة للأرقام، فإنها ترتب من الأصغر إلى الأكبر. وبما أن sort() تعدل القائمة الأصلية في مكانها، فقم بإنشاء نسخة أولاً إذا كنت بحاجة إلى الحفاظ على الترتيب الأصلي.
جرّب بنفسك
import 'dart:io';
void main() {
// قراءة اسم المطعم
String? restaurantName = stdin.readLineSync();
// قراءة أسماء الأطباق حتى يتم إدخال سلسلة فارغة
List<String> dishes = [];
String? dish;
while ((dish = stdin.readLineSync()) != null && dish!.isNotEmpty) {
dishes.add(dish);
}
// TODO: اكتب الكود الخاص بك أدناه
// إنشاء نسخة من القائمة الأصلية وفرزها
// حساب إجمالي عدد الأطباق
// طباعة تنسيق المخرجات المطلوب
// إخراج النتائج
// print("Restaurant: $restaurantName");
// print("Original menu: $dishes");
// print("Sorted menu: $sortedDishes");
// print("Total dishes: $totalDishes");
// print("Status: Menu organized alphabetically");
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس 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المجموعات
ما هي المجموعة؟إنشاء مجموعةالإضافة والحذف من المجموعاتالتحقق من وجود عناصر في المجموعةتحويل قائمة إلى مجموعةاتحاد المجموعاتتقاطع المجموعاتالفرق بين المجموعاتمراجعة - قائمة ضيوف فريدة