عكس القائمة
جزء من قسم Logic & Flow في رحلة Dart على Coddy — الدرس 3 من 65.
أحيانًا تحتاج إلى عرض عناصر القائمة بترتيب عكسي. توفر Dart خاصية .reversed التي تنشئ عرضًا معكوسًا لقائمتك دون تغيير القائمة الأصلية.
تعيد خاصية .reversed كائنًا قابلًا للتكرار (iterable) يعرض عناصر القائمة بترتيب عكسي. وهذا يعني أن العنصر الأخير يظهر أولاً، والعنصر قبل الأخير يظهر ثانياً، وهكذا.
List<int> numbers = [1, 2, 3, 4, 5];
var reversedNumbers = numbers.reversed;
print(reversedNumbers); // (5, 4, 3, 2, 1)
// القائمة الأصلية تبقى دون تغيير
print(numbers); // [1, 2, 3, 4, 5]من التفاصيل المهمة هي أن .reversed تعيد كائنًا قابلًا للتكرار (iterable)، وليس قائمة (list). إذا كنت بحاجة إلى التعامل معها كقائمة، يمكنك تحويلها باستخدام .toList(). هذه الخاصية مفيدة بشكل خاص عندما تحتاج إلى معالجة البيانات بترتيب عكسي مع الحفاظ على قائمتك الأصلية كما هي.
التحدي
سهلقم بإنشاء برنامج يقوم بتحليل قائمة قراءة من خلال عرض الكتب بترتيبها الأصلي والترتيب العكسي. يجب على برنامجك القيام بما يلي:
- قراءة مدخل نصي (string) يمثل عنوان قائمة القراءة
- قراءة مدخلات نصية متعددة تمثل عناوين الكتب (سينتهي الإدخال عندما تتلقى سلسلة نصية فارغة)
- استخدام خاصية
.reversedلإنشاء عرض عكسي لقائمة الكتب - طباعة تحليل قائمة القراءة بالتنسيق الدقيق الموضح أدناه
على سبيل المثال، إذا كان عنوان قائمة القراءة هو "Summer Reading" والكتب هي "1984"، و "To Kill a Mockingbird"، و "The Great Gatsby"، فيجب أن يكون مخرج برنامجك:
Reading List: Summer Reading
Books in original order: (1984, To Kill a Mockingbird, The Great Gatsby)
Books in reversed order: (The Great Gatsby, To Kill a Mockingbird, 1984)
Total books: 3إذا كان عنوان قائمة القراءة هو "Quick Reads" وتم توفير كتاب واحد فقط "Animal Farm"، فيجب أن يكون مخرج برنامجك:
Reading List: Quick Reads
Books in original order: (Animal Farm)
Books in reversed order: (Animal Farm)
Total books: 1يجب أن يستخدم برنامجك خاصية .reversed لعرض الكتب بترتيب عكسي. تذكر أن .reversed تعيد كائناً قابلاً للتكرار (iterable)، لذا عند طباعته، سيظهر بين أقواس دائرية بدلاً من الأقواس المربعة.
ورقة مرجعية
استخدم خاصية .reversed لعرض عناصر القائمة بترتيب عكسي دون تعديل القائمة الأصلية:
List<int> numbers = [1, 2, 3, 4, 5];
var reversedNumbers = numbers.reversed;
print(reversedNumbers); // (5, 4, 3, 2, 1)
// القائمة الأصلية تظل دون تغيير
print(numbers); // [1, 2, 3, 4, 5]تعيد خاصية .reversed كائناً قابلاً للتكرار (iterable)، وليس قائمة. لتحويله مرة أخرى إلى قائمة، استخدم .toList().
جرّب بنفسك
import 'dart:io';
void main() {
// قراءة عنوان قائمة القراءة
String? title = stdin.readLineSync();
// قراءة عناوين الكتب حتى يتم إدخال سلسلة فارغة
List<String> books = [];
String? book;
while ((book = stdin.readLineSync()) != null && book!.isNotEmpty) {
books.add(book);
}
// TODO: اكتب كودك هنا
// استخدم خاصية .reversed لإنشاء عرض معكوس لقائمة الكتب
// اطبع المخرجات بالتنسيق المطلوب
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس 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المجموعات
ما هي المجموعة؟إنشاء مجموعةالإضافة والحذف من المجموعاتالتحقق من وجود عناصر في المجموعةتحويل قائمة إلى مجموعةاتحاد المجموعاتتقاطع المجموعاتالفرق بين المجموعاتمراجعة - قائمة ضيوف فريدة