Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

البحث في القائمة: indexOf

جزء من قسم Logic & Flow في رحلة Dart على Coddy — الدرس 6 من 65.

عندما تحتاج إلى العثور على مكان وجود عنصر معين في قائمة، توفر Dart طريقة indexOf(). تبحث هذه الطريقة عبر القائمة وتعيد موضع الفهرس لأول ظهور للعنصر الذي تبحث عنه.

تأخذ الطريقة indexOf() العنصر الذي تريد البحث عنه كمعامل (parameter) لها وتُرجع عدداً صحيحاً. إذا كان العنصر موجوداً في القائمة، فإنها تُرجع موقعه الفهرسي (بدءاً من 0). أما إذا لم يتم العثور على العنصر، فإنها تُرجع -1.

List<String> fruits = ['apple', 'banana', 'orange', 'banana'];

int appleIndex = fruits.indexOf('apple');    // 0
int bananaIndex = fruits.indexOf('banana');  // 1 (أول ظهور)
int grapeIndex = fruits.indexOf('grape');    // -1 (غير موجود)

هذه الطريقة مفيدة بشكل خاص عندما تحتاج إلى معرفة موضع عنصر ما قبل إجراء عمليات مثل الإدراج أو الإزالة في مواقع محددة. تذكر أن indexOf() يبحث فقط عن المطابقة الأولى، لذا إذا ظهر عنصر عدة مرات، فستحصل على فهرس أول ظهور له.

challenge icon

التحدي

سهل

قم بإنشاء برنامج يدير نظام البحث عن الكتب في المكتبة من خلال العثور على موقع كتب معينة على الرفوف. يجب على برنامجك القيام بما يلي:

  1. قراءة مدخل نصي (string) يمثل اسم قسم المكتبة
  2. قراءة مدخلات نصية متعددة تمثل عناوين الكتب الموجودة على الرف (ينتهي الإدخال عندما تتلقى سلسلة فارغة)
  3. قراءة مدخل نصي يمثل عنوان الكتاب المراد البحث عنه
  4. استخدام طريقة indexOf() للعثور على موقع الكتاب المطلوب
  5. طباعة نتائج البحث بالتنسيق الدقيق الموضح أدناه

على سبيل المثال، إذا كان قسم المكتبة هو "Science Fiction"، والكتب هي "Dune"، و "Foundation"، و "Neuromancer"، و "Foundation"، و "Ender's Game"، وكان الكتاب المراد البحث عنه هو "Foundation"، فيجب أن تكون مخرجات برنامجك:

Library Section: Science Fiction
Books on shelf: [Dune, Foundation, Neuromancer, Foundation, Ender's Game]
Searching for: Foundation
Book found at position: 1
Status: Book located successfully

إذا كان قسم المكتبة هو "Mystery"، والكتب هي "Sherlock Holmes"، و "Agatha Christie"، و "The Maltese Falcon"، وكان الكتاب المراد البحث عنه هو "Gone Girl"، فيجب أن تكون مخرجات برنامجك:

Library Section: Mystery
Books on shelf: [Sherlock Holmes, Agatha Christie, The Maltese Falcon]
Searching for: Gone Girl
Book found at position: -1
Status: Book not available

يجب أن يستخدم برنامجك طريقة indexOf() للبحث عن الكتاب. عندما يتم العثور على الكتاب (position >= 0)، قم بعرض "Book located successfully". وعندما لا يتم العثور على الكتاب (position = -1)، قم بعرض "Book not available". تذكر أن indexOf() تعيد موقع أول ظهور للكتاب إذا تكرر الكتاب عدة مرات.

ورقة مرجعية

استخدم indexOf() للعثور على موضع عنصر في قائمة:

List<String> fruits = ['apple', 'banana', 'orange', 'banana'];

int appleIndex = fruits.indexOf('apple');    // 0
int bananaIndex = fruits.indexOf('banana');  // 1 (أول ظهور)
int grapeIndex = fruits.indexOf('grape');    // -1 (غير موجود)

تُرجع هذه الطريقة موضع الفهرس (بدءاً من 0) في حال العثور عليه، أو -1 إذا كان العنصر غير موجود. وهي تعثر فقط على أول ظهور للعناصر المكررة.

جرّب بنفسك

import 'dart:io';

void main() {
  // قراءة اسم قسم المكتبة
  String? section = stdin.readLineSync();
  
  // قراءة عناوين الكتب حتى يتم إدخال سلسلة فارغة
  List<String> books = [];
  String? book;
  while ((book = stdin.readLineSync()) != null && book!.isNotEmpty) {
    books.add(book);
  }
  
  // قراءة الكتاب المراد البحث عنه
  String? searchBook = stdin.readLineSync();
  
  // TODO: اكتب الكود الخاص بك أدناه
  // استخدم طريقة indexOf() للعثور على موقع الكتاب
  
  // طباعة النتائج بالتنسيق المطلوب
  print('Library Section: $section');
  print('Books on shelf: $books');
  print('Searching for: $searchBook');
  // طباعة الموقع والحالة بناءً على نتائج البحث الخاصة بك
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow